parent、static、this の違い
自己を完全に理解したい場合は、parent、static、this と区別する必要があります。以下に比較を示します。
#parent
# self とparent の区別は比較的簡単です。parent は親クラス/基本クラスの隠しメソッド (または変数) を指し、self は親クラス/基本クラスの隠しメソッド (または変数) を指します。独自のメソッド (または変数) を参照します。たとえば、コンストラクター内で親クラスのコンストラクターを呼び出します。 (無料の学習ビデオ チュートリアルの共有:php ビデオ チュートリアル)
class Base { public function __construct() { echo "Base contructor!", PHP_EOL; } } class Child { public function __construct() { parent::__construct(); echo "Child contructor!", PHP_EOL; } } new Child; // 输出: // Base contructor! // Child contructor!
static
static汎用 関数や変数を変更してクラス関数やクラス変数にすることや、関数内の変数を変更してそのライフサイクルをアプリケーション全体のライフサイクルに拡張することもできます。ただし、self との関連付けは、PHP 5.3 以降に導入された新しい用途である静的遅延バインディングです。 staticの静的遅延バインディング機能を使用すると、実行時に所属クラスを動的に決定することができます。例:class Base { public function __construct() { echo "Base constructor!", PHP_EOL; } public static function getSelf() { return new self(); } public static function getInstance() { return new static(); } public function selfFoo() { return self::foo(); } public function staticFoo() { return static::foo(); } public function thisFoo() { return $this->foo(); } public function foo() { echo "Base Foo!", PHP_EOL; } } class Child extends Base { public function __construct() { echo "Child constructor!", PHP_EOL; } public function foo() { echo "Child Foo!", PHP_EOL; } } $base = Child::getSelf(); $child = Child::getInstance(); $child->selfFoo(); $child->staticFoo(); $child->thisFoo();出力結果は次のとおりです:
関数参照に関して、self と static の違いは次のとおりです。 is:
静的メンバー関数の場合、self はコードの現在のクラスを指し、static は呼び出しクラスを指します。非静的メンバー関数の場合、self はポリモーフィズムを抑制し、その関数を指します。現在のクラス、static はこれに相当し、dynamic は呼び出しクラスの関数を指します。 parent、self、static の 3 つのキーワードは、組み合わせると非常に興味深いものになります。これらはそれぞれ、親クラス、現在のクラス、サブクラスを指し、少し「過去、現在、未来」を持っています。風味。this
self と this は最もよく議論される組み合わせであり、最も悪用される可能性が高いものでもあります。 2 つの主な違いは次のとおりです: 1. これは静的メンバー関数では使用できませんが、自身では使用できます; 2. 静的メンバー関数へのアクセス/変数、$this:: または $this->;3 の代わりに self を使用することをお勧めします。非静的メンバー変数にアクセスするには、self は使用できません。this;## のみを使用します。 # 4. これは、オブジェクトがインスタンス化されている場合に使用する必要がありますが、self にはこの制限はありません;
5. 非静的メンバー関数内で使用すると、self は多態的な動作を抑制し、現在のクラス; これは、クラスのオーバーライド関数 (存在する場合) を呼び出すことを指します。
自己の目的上記の 3 つのキーワードの違いを読んだ後、自己の目的はすぐにわかりますか?一文で要約すると、self は常に「現在のクラス (およびクラス インスタンス)」を指します。詳細:
1. クラス名を置換し、現在のクラスの静的メンバー変数と静的関数を参照します;
2. 多態性の動作を抑制し、現在のクラスの関数を参照します中程度のカバレッジの実装;
推奨される関連記事とチュートリアル:
php チュートリアル以上がPHPにおけるselfキーワードの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。