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

PHPにおけるselfとstaticの違いを詳しく解説

小云云
小云云オリジナル
2018-03-31 09:59:191759ブラウズ

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 サイトの他の関連記事を参照してください。

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