ホームページ >バックエンド開発 >PHPチュートリアル >ファクトリモードによる PHP の静的遅延バインディングを理解する

ファクトリモードによる PHP の静的遅延バインディングを理解する

WBOY
WBOYオリジナル
2016-06-23 13:26:08992ブラウズ

単純なファクトリ パターンを通じて 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);//抽象类只是不能实例化对象?>

抽象クラスの selfInstance メソッドが間違っていることに注意してください。内部的に使用される return new self() は解析コンテキスト、つまりこのメソッドの呼び出しです。最初に抽象クラスに配置すると、自然なインスタンス化エラーが発生します

クラス内では、 new self() new static() はクラス オブジェクトをインスタンス化できますが、self は解析コンテキスト、つまりそのインスタンス化と定義です。独自のクラス、静的は、現在のコンテキストでどのクラスが自分自身を呼び出しているかに応じて、自分自身をこのクラスにポイントします

静的遅延バインディング

new self();

独自に定義されたクラスのオブジェクトをインスタンス化します

newparent( );

自分の親クラスのオブジェクトをインスタンス化します

new static();

自分の現在のクラスを呼び出すオブジェクトをインスタンス化します

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。