PHP オブジェクト指向における new self() と new static() の違い

藏色散人
リリース: 2023-04-07 17:42:01
転載
2766 人が閲覧しました

先に結論を明確にしておくと、PHP では、self は現在呼び出されているメソッドを定義するクラスを指し、static は現在の静的メソッドを呼び出すクラスを指します。

次に、例を使用して上記の結果を証明します

class A 
{
    public static $_a = 'Class A';
    public static function echoProperty()
    {
        echo self::$_a . PHP_EOL;
    }
}
class B extends A 
{
    public static $_a = 'Class B';
}
$obj = new B();
B::echoProperty();//输出 Class A
ログイン後にコピー

これが当てはまる理由は、現在のクラスを静的に参照するために self:: または __CLASS__ が使用されているためです。呼び出されるメソッドの定義。このメソッドが配置されているクラスで、上記のクラス A のメソッド echoProperty を次のように変更します。親クラスでは、継承されたクラスを使用します このメソッドは引き続き親クラスの静的プロパティにアクセスします PHP5.3 では新しい構文が追加されます: Late static binding. self キーワードの代わりに static キーワードを使用して、によって返される同じクラスを静的にポイントしますget_called_class().、つまり静的メソッドを現在呼び出しているクラスの場合、このキーワードは静的メソッドにアクセスする場合にも有効です。

次の例は、new self() と new static() の違いをよりよく示しています (後者は、PHP の遅延静的バインディングを使用して、呼び出しメソッドの現在のクラスを指します)

class A 
{
    public static $_a = 'Class A';
    public static function echoProperty()
    {
        echo static::$_a . PHP_EOL;
    }
}
//再次调用B::echoProperty将输出   'CLASS B'
ログイン後にコピー

For PHP 関連の詳しい知識については、

PHP 中国語 Web サイト

をご覧ください。

以上がPHP オブジェクト指向における new self() と new static() の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート