[解決済み] PHPのself::$barとstatic::$barの違いは何ですか?
質問
を使用するのとでは、どのような違いがあるのでしょうか。
self
と
static
を、以下の例で見てみましょう。
class Foo
{
protected static $bar = 1234;
public static function instance()
{
echo self::$bar;
echo "\n";
echo static::$bar;
}
}
Foo::instance();
生産する
1234
1234
解決方法は?
を使用する場合
self
を使用してクラス・メンバーを参照する場合、そのキーワードを使用したクラス内を参照していることになります。この場合
Foo
という保護された静的プロパティを定義しています。
$bar
. を使用する場合
self
の中に
Foo
クラスを使用してプロパティを参照する場合、同じクラスを参照していることになります。
したがって、もしあなたが
self::$bar
の他の場所で
Foo
クラスがあったのに
Bar
クラスで、そのプロパティに異なる値を指定した場合、それは
Foo::$bar
の代わりに
Bar::$bar
というのは、あなたの意図するところとは違うかもしれません。
class Foo
{
protected static $bar = 1234;
}
class Bar extends Foo
{
protected static $bar = 4321;
}
あなたが
コール
を経由してメソッドを実行します。
static
という機能を呼び出していることになります。
後期静的バインディング
(PHP 5.3 で導入されました)。
上記のシナリオでは
self
は、結果的に
Foo::$bar
(1234).
また
static
は、結果として
Bar::$bar
(4321)であるため
static
の中で再宣言されたことを考慮します。
Bar
クラスの実行時に
// self
var_dump(Foo::$bar);
// (int) 1234
// static
var_dump(Bar::$bar);
// (int) 4321
サブクラスでプロパティを再宣言することはあまりないので、 通常はプロパティではなくメソッドやクラス自身に対して遅延静的バインディングを使用します。
static
キーワードを使用して遅延結合コンストラクタを呼び出す方法は、この関連する質問にあります。
新しい自己と新しい静的
しかし、だからといって
static
をプロパティで使用することもできます。
関連
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] どのような場合に '$this' よりも 'self' を使うべきですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] mixinとは何か、なぜ有用なのか?
-
[解決済み] パブリック、プライベート、プロテクトの違いは何ですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] Fatal error: メンバ関数bind_param()のbooleanに対する呼び出し [重複] [重複
-
[解決済み】Fatal error: 未定義の関数 sqlsrv_connect() を呼び出した。
-
[解決済み】予期せぬ例外。SQLSTATE[HY000] [1045] Access denied for user ****@'localhost' (using password: YES)
-
[解決済み】 $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて]
-
[解決済み】PDOException SQLSTATE[HY000] [2002] そのようなファイルまたはディレクトリがありません。
-
[解決済み】PHPのクラスが見つからないが、インクルードされている
-
thinkphp5 timestamp 非整形の数値に遭遇した。
-
[解決済み] $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて
-
[解決済み] 新しい自分vs.新しい静止画
-
[解決済み] PHP 5: const と static の違い