new static() と new self() の違いと使い方の紹介

伊谢尔伦
リリース: 2023-03-11 08:04:01
オリジナル
1570 人が閲覧しました

この記事では、PHP の new static() と new self() の相違点と類似点の分析を主に紹介します。これは、PHP プログラミングを学習するすべての人にとって役立つと思います。

問題の原因はローカルにサイトを構築していることです。 PHP 5.2 を使用して構築できないことがわかりました。Web サイトの

PHP コード には 5.3 以降の部分が多く含まれており、5.2 で実行するには変更が必要でした。

場所を変えたら、

return new static($val);
ログイン後にコピー

という場所を見つけました

return new self($val);
ログイン後にコピー

これはすごいですね

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()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_static()); // A
ログイン後にコピー

しか見たことがなかったので、両者の違いをネットで調べてみました。

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

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

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

self は、新しい操作が行われるメソッドの同じクラスを指します。 PHP 5.3 の後期静的バインディングの

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

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"
*/
ログイン後にコピー

この例は、基本的に一目で理解するのが簡単です。

原理は理解できましたが、return new static($val);の問題をどうやって解決すればよいでしょうか?

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

rrreee

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

以上がnew static() と new self() の違いと使い方の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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