php中self关键字说明

self一般指向当前类的静态方法和常量,用self::加方法名和常量名方式引用。

$this则是指向当前类的实例对象,用$this->加方法名和实例变量方式引用。

在一些参数为callback的方法里,可以用字符串self形式指向当前类,而不要直接用self,如call_user_func('self', $method)中。

另外self引用的总是当前类的方法和常量,子类调用父类的静态方法,其中的父类方法中的self仍是指向父类本身的,如果子类的同名方法覆盖了父类方法,则可以用parent::来引用父类方法。

<?phpinterface AppConstants {    const FOOBAR = 'Hello, World.';}class Example implements AppConstants {    public function test() {        echo self::FOOBAR;    }}$obj = new Example();$obj - > test(); // outputs "Hello, world."class MyClass {    const NAME = 'Foo';    protected function myFunc() {        echo "MyClass::myFunc()\n";    }    static public function display() {        echo self::NAME;    }    static public function getInstance() {        $instance = new self;        return $instance;    }}class ChildClass extends MyClass {    const NAME = 'Child';    // Override parent's definition    public function myFunc() {        // But still call the parent function        parent::myFunc();        echo "ChildClass::myFunc()\n";    }}$class = new ChildClass();$class - > myFunc();echo('Class constant: ');ChildClass::display();echo('Object class: ');echo(get_class(ChildClass::getInstance()));?>

output

Hello, World.MyClass::myFunc()ChildClass::myFunc()Class constant: FooObject class: MyClass

另外可以再参考一个php-5.3.0的运行时绑定(延迟绑定)的用法,地址是:http://cn2.php.net/oop5.late-static-bindings