Home > Backend Development > PHP Tutorial > 通过工厂模式来认识PHP的静态延迟绑定

通过工厂模式来认识PHP的静态延迟绑定

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-23 13:26:08
Original
1026 people have browsed it

通过简单的工厂模式来认识PHP的静态延迟绑定

<?phpabstract class Demo{    public static $name = 'sallency';        //error    public static function selfInstance() {        //self是用来解析上下文        //此处的语境为调用定义它的类        //抽象类不可实例化所以会报错        return new self();    }        public static function staticInstance() {        //static是用来调用上下文        //此处的语境为解析调用它的上下文(某个类)        //若是非抽象类调用的话自然可以实例化        return new static ();    }}class StaticDemo extends Demo{    public function __construct() {        echo "i am construct of " . __CLASS__ . '<br/>';        echo self::$name;    }}var_dump(StaticDemo::staticInstance());var_dump(Demo::$name);//抽象类只是不能实例化对象?>
Copy after login

注意抽象类里的selfInstance方法是错误的,内部使用的return new self()是解析上下文,即调用此方法最初定义的地方,最初是在抽象类中,自然实例化报错

在类中 new self() new static()都可以实例化类对象,但self是解析上下文,即实例化定义自己的类,static则是根据当前上下文是哪一类在调用自己而将自己指向此类

静态延迟绑定

new self();

实例化一个自己被定义的类的对象

new parent();

实例化一个自己的父类对象

new static();

实例化一个调用自己的当前类的对象

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template