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

PHP の static キーワードと self キーワードとの違い、staticself_PHP チュートリアル

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

PHPのstaticキーワードとselfキーワードとの違い、staticselfの概要

私はデザインパターンを学んでいます。以前にシングルトンパターンについての記事がありましたが、静的キーワードの理解があまり信頼できないことに気づきましたので、もう一度見直します。

静的キーワード

static キーワードは、PHP マニュアルで次のように導入されています。
コードをコピーします コードは次のとおりです:
クラスのプロパティまたはメソッドを静的として宣言すると、クラスのインスタンス化を必要とせずにアクセスできるようになります。静的として宣言されたプロパティには、インスタンス化されたクラス オブジェクトではアクセスできません (ただし、静的メソッドではアクセスできます)。
一般的な意味は、クラスのプロパティとメソッドを静的として宣言した後、オブジェクトをインスタンス化せずに静的プロパティとメソッドに直接アクセスできることです。

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"; エコー self::$name;
}
}
クラスセダンは車両を拡張します {
Protected static $name = 'これはセダンです';
}
セダン::what_vehicle();

プログラム出力:


コードをコピーします コードは次のとおりです: セダン これは乗り物です

静的な例:


コードをコピーします コードは次のとおりです: クラス車両{
Protected static $name = 'これは車両です';
パブリック静的関数 what_vehicle() {
echo get_named_class()."n"; エコー静的::$name;
}
}
クラスセダンは車両を拡張します {
Protected static $name = 'これはセダンです';
}
セダン::what_vehicle();


プログラム出力:

コードをコピーします
コードは次のとおりです: セダン これはセダンです

まとめ

前回の記事を見ると、一ヶ月以上ブログを更新していませんでしたが、一番の理由は、今後も頑張らなければならないということです。この記事は少し感情を込めて書きました。

http://www.bkjia.com/PHPjc/1024909.html

www.bkjia.com本当http://www.bkjia.com/PHPjc/1024909.html技術記事 PHP の static キーワードと self キーワードとの違い、staticself の概要 以前、シングルトン パターンについての記事があったので読み返してみたら…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。