代码改变世界

PHP面向对象

2012-12-20 15:52  一品黄山  阅读(144)  评论(0编辑  收藏  举报

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{}