ホームページ  >  記事  >  バックエンド開発  >  PHP の new static() と new self() の違いの概要、staticself_PHP チュートリアル

PHP の new static() と new self() の違いの概要、staticself_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:09:57865ブラウズ

PHP の new static() と new self() の違い、staticself の紹介

長い夜です!

今日は地元チームを率いてウェブサイトを構築します。 PHP 5.2 ではビルドできないことがわかり、Web サイトの PHP コードには 5.3 以降の部分が多く含まれていたため、5.2 で実行できるように変更するように言われました。

着替えて場所を見つけました

コードをコピーします コードは次のとおりです:

新しい静的($val)を返します;

この馬はすごいですね、見ただけです
コードをコピーします コードは次のとおりです:

新しい自分($val)を返します;

そこで、両者の違いをネットで調べてみました。

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

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

外国人による専門的な解説を見てみましょう。

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

PHP 5.3 の後期静的バインディングの static は、メソッドを呼び出す階層内のクラスを指します。

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

コードをコピーします コードは次のとおりです:
クラスA{
パブリック静的関数 get_self() {
return new self();
}
パブリック静的関数 get_static() {

return new static();
}
}

クラス B は A を拡張します {}

echo get_class(B::get_self()); // A

echo get_class(B::get_static()); // B
echo get_class(A::get_static()); // A

この例は基本的に一目で理解するのが簡単です。
原理は理解できましたが、 return new static($val); の問題をどうやって解決すればよいでしょうか?

実際、次のように get_class($this) を使用するのは簡単です

;

コードをコピーします コードは次のとおりです:
クラスA{
パブリック関数 create1() {
$class = get_class($this);
新しい $class();
を返します }
パブリック関数 create2() {
return new static();
}
}
クラス B は A を拡張します {

}

$b = 新しい B();

var_dump(get_class($b->create1()), get_class($b->create2()));

/*

結果
文字列(1) "B"
文字列(1) "B"
*/

http://www.bkjia.com/PHPjc/940493.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/940493.html技術記事 PHP の new static() と new self() の違いを紹介するのは長い夜です。 今日はリーダーが現地でウェブサイトを構築します。 Web サイトには PHP コードがたくさんありますが、PHP 5.2 を使用してビルドできないことがわかりました...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。