知识点:
- 类型约束
- 条件约束
- 自动加载
在面向对象程序设计中,PHP还提供了非常的不错的语法和使用规则。
类型约束:可以使我们的变成更加的严谨
自动加载:当我们的文件过于庞大的时候我们需要将其划分为多个文件,自动加载就为我们带来了便利
类型运算符
instanceof用于确定一个PHP变量是否属于某一类class的实例
instanceof也可以用来确定一个变量是不是继承自某一父类的子类的实例
instanceof 也可以用于确定一个变量是不是实现了某个接口的类的实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php interface A { public function func(); } abstract class B implements A { abstract public function func(); } class C extends B { public function func(){ echo 'ok'; } } class D extends B { public function func(){ echo '好的'; } } // B实现了A // C、D继承自B // C、D是兄弟 $obj = new C(); // var_dump($obj); //判断是否某个类的实例 var_dump($obj instanceof C);//true//obj是C的实例吗? var_dump($obj instanceof D);//false var_dump($obj instanceof B);//true var_dump($obj instanceof A);//true |
类型约束
- PHP5可以使用类型约束。函数的参数可以指定其类型
- 如果一个类或接口指定了类型约束,则其所有的子类或实现也都如此
- 类型约束不能用于标量类型如int或string
- 在类型约束中,类名可以作为方法参数的类型限定,就像int string那样的作用,这是类的类型约束的其中一种。
例子1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?php interface A { public function func(); } abstract class B implements A { abstract public function func(); } class C extends B { public function func(){ echo 'ok'; } } class D extends B { public function func(){ echo '好的'; } } // B实现了A // C、D继承自B // C、D是兄弟 $obj1= new C(); $obj2=new D(); $arr = [1,2,3]; function test(D $n){ echo 'ok'; } function test2(B $n){ echo 'oktest2'; } test($obj2); echo "<hr>"; // test($obj1);//不属于D的实例 test2($obj1); |
例子2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php class A { public function test(C $a) { echo 'ok'; } } class B { } class C extends B { } $obj = new C(); $objA = new A(); $objB = new A(); $objA -> test($obj); // $objA -> test($objB); B不是C的子类不可以传 |
总结:
在类的类型约束中,如果变量是约束类的子类实例化对象,即满足约束条件,如果是父类或者兄弟类则不满足。