ホームページ >バックエンド開発 >PHPチュートリアル >PHP におけるこの self static との違い

PHP におけるこの self static との違い

不言
不言オリジナル
2018-04-14 17:14:312279ブラウズ

この記事では、PHP におけるこの self static の違いを主に紹介します。これは、必要な友人に参照してもらえるように共有します。 https://blog.csdn.net/ mrzhouxiaofei /article/details/78648079

紹介しました

最近、私はソフトウェアエンジニアリングコースの設計をしていて、Laravelのソースコードを拾いに行って再度検索したところ、問題が発生したことがわかりました。自己静的について深く理解していなかった問題があったので、同じ間違いを繰り返さないように記録します。

Text

this

これは、現在のオブジェクトを指し、現在のオブジェクトの非静的変数と非静的メソッドにアクセスするために使用されます。

<?phpclass Person {
    public $name;    public function getName() {
        echo $this->name;
    }
}$p = new Person();$p2 = new Person();$p->name = "小红";$p2->name = "小明";$p->getName();  // 小红$p2->getName();  // 小明

。上記の例では、2 つのオブジェクトが new であり、それぞれのオブジェクトの name 属性を設定します。これは、現在のオブジェクトの name 属性にアクセスするために使用されます。そのため、name の値がそれぞれ出力されます。したがって、これは現在のオブジェクトを指し、他のオブジェクトやクラスを指しません。

self

self は、クラス自体を指し、インスタンス化されたオブジェクトを指すのではなく、通常、クラス内の静的変数と静的メソッドにアクセスするために使用されます。 2 つのオブジェクトが追加および変更されます。一方のオブジェクトの name 属性ともう一方のオブジェクトの name 属性値も変更されます。したがって、self は現在のクラスを指し、すべてのオブジェクトが同じ値を共有します。

static

static は self と同じで、どちらもクラスを指し、通常はクラス内の静的変数と静的メソッドにアクセスするために使用されますが、いくつかの違いがあります。具体的には、どのクラスに self が記述されるか、どのクラスであるかです。これは実際に呼び出されるクラスです。静的は親クラスで記述され、この静的はサブクラスを指します。これは正式には

late static binding

と呼ばれます。

<?phpclass Person {
    public static $name = "小红";    public static function getName() {
        echo self::$name;
    }
}$p = new Person();$p2 = new Person();$p::getName();  // 小红$p2::getName();  // 小红$p::$name = "小明";$p::getName();  // 小明$p2::getName();  // 小明

上記の例からわかるように、self はクラス A で書かれており、呼び出されるときはクラス A を指します。 static もクラス A で書かれていますが、クラス B のオブジェクトで呼び出された場合、クラス B のサブクラスクラス A はクラス A を指します。クラス B を使用する場合、static はそれが指すクラスを決定します。これが

遅延静的バインディング です。

後の静的バインディング

概要

this は現在のオブジェクトを指し、現在のオブジェクトの非静的変数および非静的メソッドにアクセスするために使用されます。

self はクラスを指し、通常は静的変数および静的メソッドにアクセスするために使用されます。実行前に、現在のクラスの静的メソッドがどのクラスを指すかが決定されます。

static は、通常、現在のクラスの静的変数および静的メソッドにアクセスするために使用されるクラスを指しますが、

static に限定されません。実行時にどのクラスを指すかを決定します。

関連する推奨事項:

PHP における self、static、$this の違いと、後期静的バインディングの詳細な説明

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

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