ホームページ >バックエンド開発 >PHPチュートリアル >PHP における new static() と new self() の相違点と類似点の分析

PHP における new static() と new self() の相違点と類似点の分析

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

self - これはこのクラス、コードセグメント内のこのクラスです。

static - PHP 5.3 は、$this に似た現在のクラスを追加するだけです。これはヒープ メモリから抽出され、現在インスタンス化されているクラスにアクセスするため、static はそのクラスを表します。

外国人の専門的な説明を見てみましょう:

self は、新しい操作が行われるメソッドの同じクラスを指します。

PHP 5.3 の後期静的バインディングの static は、呼び出す階層内の任意のクラスを指します。次の例では、B は A から両方のメソッドを継承します。 self は A の最初のメソッドの実装で定義されているため A にバインドされますが、 static は呼び出されたクラスにバインドされます ( get_called_class() も参照)。

class A {  public static function get_self() {    return new self();  }   public static function get_static() {    return new static();  }} class B extends A {} echo get_class(B::get_self()); // Aecho get_class(B::get_static()); // Becho get_class(A::get_static()); // A




この例は、基本的に一目で理解できます。

原理は理解できましたが、return new static($val); の問題はまだ解決されていません。

実際、get_class($this); を使用するのと同じくらい簡単です。 コードは次のとおりです:

class A {  public function create1() {    $class = get_class($this);    return new $class();  }  public function create2() {    return new static();  }} class B extends A { } $b = new B();var_dump(get_class($b->create1()), get_class($b->create2())); /*The result string(1) "B"string(1) "B"*/




興味のある友人は、サンプル コードをテストしてみると、新たなメリットがあると思います。 !

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