植臻

谦虚、热情、简单、极致

php5.3引入的延迟静态绑定

| Comments

先看这段代码:

<?php
class A{
    public static funciton create(){
        return new static();
    }
    public static function createself(){
        return new self();
    }
}

class B extends A{

}

class C extends A{

}
var_dump( B::create() );
var_dump( C::createself() );
?>

得到结果如下

object(B)#1 (0) { } 
object(A)#1 (0) { } 

原因是self关键词的执行环境是定义self的类,而不是调用它的对象, static与self的区别就是它的执行环境是调用它的对象。

Comments