1.static 关键字的使用
1 <?php 2 class Foo 3 { 4 public static $my_static = 'foo'; 5 6 public function staticValue() { 7 return self::$my_static; 8 } 9 } 10 11 class Bar extends Foo 12 { 13 public function fooStatic() { 14 return parent::$my_static; 15 } 16 } 17 18 print "通过类名访问 静态属性:" . Foo::$my_static . "<br />"; 19 20 $foo = new Foo(); 21 print "通过对象访问普通方法,调用静态属性:" . $foo->staticValue() . "<br />"; 22 print "通过对象直接访问 静态属性:" . $foo->my_static . "<br />"; // Undefined "Property" my_static 23 24 //print "通过对象已::的形式访问 静态属性:" . $foo::$my_static . "<br />"; 25 $classname = 'Foo'; 26 //print "通过变量类名访问 静态属性:" . $classname::$my_static . "<br />"; // PHP 5.3.0之后可以动态调用 27 28 print "通过子类访问父类的静态属性:" . Bar::$my_static . "<br />"; 29 $bar = new Bar(); 30 print "通过子类实例访问普通方法,调用父类静态属性:" . $bar->fooStatic() . "<br />";
输出结果:
通过类名访问 静态属性:foo
通过对象访问普通方法,调用静态属性:foo
Notice: Undefined property: Foo::$my_static in E:\webroot\htdocs\dede\test\opp.php on line 22
通过对象直接访问 静态属性:
通过子类访问父类的静态属性:foo
通过子类实例访问普通方法,调用父类静态属性:foo
2.抽象类
特点:
1.抽象类不能被实例化,只能被继承。只是定义或部分实现子类需要的方法,而子类通过继承抽象类并实现其中的抽象方法,使抽象类具体化。
2.通过abstract关键字定义抽象类和抽象方法,抽象方法只能以“;”结束,而不能有具体的函数体。
3.所有的子类必须实现父类的所有抽象方法,除非在子类中也将此方法定义为抽象方法。
4.子类中对父类抽象方法的实现需要重新声明,参数的个数也要和父类保持一致,并且访问控制不能严格与父类中的访问控制。
5.抽象方法只能被包含在抽象类中,而不能再普通方法中包含抽象方法。
3.接口
特点:
1.接口是纯粹的类模版,只定义功能而不包含方法的实现内容,可包含:属性和方法的声明。
2.接口通过interface关键字修饰,任何实现了接口的类都必须实现接口中所定义的所有方法。
3.一个类可以同时集成一个父类实现任意多个接口,如:class Consultancy extends Timedservice implements Bookable,Changeable{}