この記事ではPHPのstaticキーワードとselfキーワードとの違いを中心に紹介します この記事では静的キーワードである遅延バインディング(Late Static Bindings)の定義について解説します。 )、selfキーワードとの違いなど、必要な友達は参考にしてください
概要
以前にシングルトンパターンについての記事があったのですが、静的キーワードの理解があまり当てにならないことがわかったので、もう一度復習してみます。
静的キーワード
PHP マニュアルの static キーワードの概要は次のとおりです:
コードは以下の通りです:
クラスのプロパティまたはメソッドを static として宣言すると、クラスのインスタンス化を必要とせずにアクセスできるようになります。static として宣言されたプロパティには、インスタンス化されたクラス オブジェクトではアクセスできません (ただし、static メソッドではアクセスできます)。
一般的な意味は、クラスのプロパティとメソッドを静的として宣言した後、オブジェクトをインスタンス化せずに、静的プロパティとメソッドに直接アクセスできるということです。PHP の静的メンバーとメソッドの特徴は次のとおりです。
1. クラスのインスタンスを介して静的メンバーにアクセスすることはできませんが、静的メソッドはアクセスできます。
2. -> 演算子を使用して静的メンバーにアクセスすることはできません。
3. 静的メソッドのスコープ内では、$this キーワードは出現できません。つまり、静的メソッドでは通常のメンバー変数にアクセスできません。
4. 静的メンバーとメソッドには、オブジェクトをインスタンス化せずに、クラス名を通じて直接アクセスできます。
遅延静的バインディング
以下の内容は PHP マニュアルからの抜粋です:
コードは以下の通りです:
PHP 5.3.0 以降、PHP には遅延静的バインディングと呼ばれる機能が追加されました。これは、継承スコープ内で静的に呼び出されるクラスを参照するために使用されます。
正確に言うと、遅延静的バインディングの動作原理は、前の「非転送呼び出し」にクラス名を保存することです。静的メソッド呼び出しを行う場合、クラス名は明示的に指定されたもの (通常は :: 演算子の左側) であり、非静的メソッド呼び出しを行う場合は、オブジェクトが属するクラスです。いわゆる「転送呼び出し」とは、self::、parent::、static::、および forward_static_call() の方法で行われる静的呼び出しを指します。 get_called_class() 関数を使用すると、呼び出されたメソッドのクラス名を取得でき、static:: はそのスコープを示します。
この機能を理解するには、マニュアルの例を参照してください
自己 vs 静的
デモを使用して、self と static の違いを直接説明します。
自己例:
コードは次のとおりです:
クラス車両{
protected static $name = 'これは車両です';
パブリック静的関数 what_vehicle() {
echo get_called_class()."n";
echo self::$name;
}
}
クラスセダンは車両を拡張します{
protected static $name = 'これはセダンです';
}
セダン::what_vehicle();
プログラム出力:
コードは次のとおりです:
セダン
これは乗り物です
静的な例:
コードは次のとおりです:
クラス車両{
protected static $name = 'これは車両です';
パブリック静的関数 what_vehicle() {
echo get_called_class()."n";
echo static::$name;
}
}
クラスセダンは車両を拡張します{
protected static $name = 'これはセダンです';
}
セダン::what_vehicle();
プログラム出力:
コードは次のとおりです:
セダン
これはセダンです
概要
前回の記事を見ると、一ヶ月以上ブログを更新していませんでしたが、一番の理由は、今後も頑張らなければならないということです。この記事は少し感情を込めて書きました。