ThinkPHP5模型实例详解 / new static 延迟静态绑定

new static 延迟静态绑定

new static 延迟静态绑定

学过PHP对象的都知道new self()是什么意思。那么:new static()是个什么鬼呢?其实就是PHP5.3以上新增的功能:延迟静态绑定。好高大上的名字,其它没那么神秘,下面我们用一个实例,扒掉new static()的底裤,让你看清真面目:

废话不说,直接上代码:

<?phpclass Father{//父类中的say方法public  function say(){return 'PHP';
    }public static function demo(){$obj = new static();//猜想一下,应该调用哪个say方法呢?return $obj -> say();
    }
}class Sub extends Father{//子类中的say方法public function say(){return 'ThinkPHP5';
    }
}echo Father::demo();  //返回: PHPecho Sub::demo(); //返回:ThinkPHP

本例子,有二个类,父类和子类,父类中定义一个静态公共方法,里面有new static()语句,用来动态调用类方法。
 哪个类调用这个方法,就调用哪个类的say方法。


如:Father类调用demo方法,就会调用Father类中的say方法,如果是Sub类调用这个静态方法,就调用Sub类中的say方法。
 所以这个new static 中的static,有点像类变量。static可以取二个值:Father和Sub,这也$this很像的