PHP では、self キーワードは現在のクラスを表すことができ、通常は現在のクラスの静的メソッドまたは静的プロパティを呼び出すために使用されます。ただし、static 属性を定義できることに加えて、static には self と同様の関数 (現在のクラスを表す) もあります。
しかし、この 2 つにはまだ一定の違いがあります。コードを通して検証しました:
<?php header("Content-Type:text/html;charset=utf-8"); Class A{ public static $p1=1; public $p2=2; public static function showInfo(){ echo "<br/>".self::$p1; } public static function showInfo2(){ echo "<br/>".static::$p1; } } Class B extends A{ static $p1=10;//此处覆盖继承过来的变量p1. public $p2=20; } A::showInfo(); echo "<br/>"; B::showInfo(); echo "<hr/>"; A::showInfo2(); echo "<br/>"; B::showInfo2();
結果からわかります:
メソッド showInfo() が呼び出されたとき、出力オブジェクトは self です。 ::$p1 。このとき、クラスBがクラスAを継承し、継承したメソッドがクラスBで呼び出されたとしても、表示されるのは常にselfキーワードが存在するクラスです。したがって、self によって表される現在のクラスは、主に現在のコードが配置されているクラスであると言えます。
メソッド showInfo2() が呼び出されるとき、出力オブジェクトは static::$p1 です。このときの出力結果は異なります。クラス A は、呼び出す属性を出力します。 B は、呼び出す属性 (クラス A のメソッドを継承した後に上書きされる $p2 の値) も出力します。したがって、 static は、現在のメソッドが呼び出されるクラスを表します。
したがって、self と static はどちらも現在のクラスを表すことができますが、その意味は異なります。
関連する推奨事項:
PHP オブジェクト指向における self と static の違い
以上がPHPにおけるselfとstaticの違いを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。