ホームページ > 記事 > PHPフレームワーク > Laravelでのselfの使用法は何ですか
laravel では、self キーワードはクラス名を置き換えるために使用されます。これは、現在のクラスの静的メンバー変数と静的関数を参照できます。多態性の動作を抑制するためにも使用されます。次の関数を参照できます。サブクラスではなく現在のクラス。オーバーライドされた実装では、self は常に現在のクラスとクラス インスタンスを指します。
#この記事の動作環境: Windows 10 システム、Laravel バージョン 6、Dell G3 コンピューター。
this
を使用して静的メンバー関数内の非メンバー関数を呼び出すことはできませんが、self は使用できます
静的メンバー関数/変数/定数を呼び出すには、他のメンバー関数は self
を使用して静的メンバー関数と非静的メンバー関数を呼び出すことができます。議論が深まるにつれて、self
はそれほど単純ではないことがわかりました。これを考慮して、この記事では、まずいくつかのキーワードを比較および区別し、次に self
の使用法をまとめます。
parent
、static
と this
の違い self# を完全に理解したい場合# # は、
parent 、
static および
this とは区別する必要があります。以下に比較を示します。
self と
parent の区別は比較的簡単です。
parent は、親クラス/ 基本クラスの隠しメソッド (または変数)、
self は独自のメソッド (または変数) を参照します。たとえば、コンストラクター内で親クラスのコンストラクターを呼び出します。
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 一般的な目的は、関数または変数を次のように変更することです。これをクラス関数にすると、クラス変数は関数内の変数を変更して、そのライフサイクルをアプリケーション全体のライフサイクルに拡張することもできます。しかし、これは
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();プログラムの出力は次のとおりです:
Base constructor! Child constructor! Base Foo! Child Foo! Child Foo!関数参照の観点から見ると、
self と
static の違いは次のとおりです。静的メンバー関数の場合、
self はコードの現在のクラスを指し、
static は呼び出しクラスを指します。非静的メンバー関数の場合、
self はポリモーフィズムを抑制します。
static は現在のクラスのメンバー関数を指します。
static は
this
parent
、
self、
static
thisself
と
this
this は静的メンバー関数では使用できませんが、
self または
$this->;
## の代わりに self
を使用することをお勧めします。 # ではありません 静的メンバー変数にアクセスするには、this
のみです。オブジェクトが既に作成されている場合は、
self
にはこの制限はありません。
は非静的メンバー関数内で使用され、this
呼び出しクラス (存在する場合) のオーバーライド関数を参照します。
の目的 上記 3 つのキーワードの違いを読んだ後、 の目的はすぐにわかりますか? ?一文で要約すると、self
は常に「現在のクラス (およびクラス インスタンス)」を指します。詳細は次のとおりです: <ol>
<li>クラス名を置換し、現在のクラスの静的メンバー変数と静的関数を参照します。</li>
<li>ポリモーフィックな動作を抑制し、オーバーライドされた実装ではなく、現在のクラスの関数を参照します。 </li>
</ol>
<h2>groove point</h2>
<ol>
<li>これらのキーワードのうち、<code>this
のみ $
記号を追加する必要があり、強迫性障害とは、非常に不快であることを意味します。;
$this->
を介して非静的メンバー関数を呼び出すことはできませんが、呼び出すことはできます。 self::
を介して実行され、呼び出し元の関数には含まれていませんが、$this->
を使用してもスムーズに実行できます。この動作は、PHP のバージョンによって動作が異なるようです。現在の 7.3 では問題ありません。self
で出力されます。結果はどうなるでしょうか?どちらも string(4) "self"
で、混乱を招く出力です; return $thisinstanceof static::class;
構文エラーが発生しますが、次の 2 つは通常の書き方は次のとおりです: [関連する推奨事項: laravel ビデオチュートリアル]
以上がLaravelでのselfの使用法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。