- 先说一下__CLASS__,get_class() , get_called_class() 区别:
__CLASS__获取当前的类名,
get_class()与上面一样,都是获取当前的类名,
get_called_class()获取当前主调类的类名。
参考程序:class A { public function say() { echo 'a is called by'.__CLASS__.'<br/>'; echo 'a is called by'.get_class().'<br/>'; echo 'a is called by'.get_called_class().'<br/>'; } } class B extends A { public function say() { parent::say(); //parent::调用父类中定义的成员方法 echo 'b is called by'.__CLASS__.'<br/>'; echo 'b is called by'.get_class().'<br/>'; echo 'b is called by'.get_called_class().'<br/>'; } } $b = new B; $b->say();
程序的运行结果是:
a is called byA
a is called byA
a is called byB
b is called byB
b is called byB
b is called byB
- 然后是static后期静态绑定介绍:
<?php class A { public static function who() { echo __CLASS__; } public static function test() { self::who(); } } class B extends A { public static function who() { echo __CLASS__; } } B::test(); ?> //输出 A class A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // 后期静态绑定从这里开始 } } class B extends A { public static function who() { echo __CLASS__; } } B::test(); // 现在输出 B
- 详细内容参考手册