PHPのselfキーワードの詳しい説明
PHP の self キーワードの分析
PHP グループの誰かが self キーワードの使用法について質問しました。答えは比較でしたメンバー関数は、self を使用して静的メンバー関数と非静的メンバー関数を呼び出すことができます。
議論が深まるにつれて、自分というものはそれほど単純なものではないことが分かりました。このことを考慮して、この記事では、まずいくつかのキーワードを比較および区別し、次に self の使い方をまとめます。
自己を完全に理解したい場合は、それを親、静的、およびこれから区別する必要があります。
以下は比較ですparent
self とparent の区別は比較的簡単です。parent は親を指します。 class/base class 隠しメソッド (または変数)、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 コンストラクター!Child コンストラクター!
Base Foo!Child Foo!Child Foo!
parent、self、static という 3 つのキーワードは、組み合わせると非常に興味深いものになります。これらはそれぞれ、親クラス、現在のクラス、サブクラスを指し、少し「過去、現在、未来」を持っています。風味。
関数参照に関して、self と static の違いは次のとおりです: 静的メンバー関数の場合、self はコードの現在のクラスを指します。 static は呼び出しクラスを指します。非静的メンバー Function の場合、ポリモーフィズムを自己抑制し、現在のクラスのメンバー関数を指します。static はこれに相当し、dynamic は呼び出しクラスの関数を指します。
this
self と this は最もよく議論される組み合わせであり、最も誤用される可能性が高い組み合わせでもあります。
両者の主な違いは次のとおりです:
これは静的メンバーでは使用できません関数、自己 はい;静的メンバー関数/変数にアクセスするには、$this:: または $this-> の代わりに self を使用することをお勧めします。;
非静的メンバー変数、self は使用できません、これのみ;
これはオブジェクトがインスタンス化されているときに使用する必要がありますが、self にはそのような制限はありません;
非静的メンバー関数内で使用する場合、自己抑制ポリモーフィズム 動作は現在のクラスの関数を参照し、これは呼び出しクラス (存在する場合) のオーバーライド関数を参照します。
自己の目的
上記の 3 つのキーワードの違いを読んだ後、自己の目的はすぐにわかりますか?一文で要約すると、self は常に「現在のクラス (およびクラス インスタンス)」を指します。
詳細:クラス名を置換し、現在のクラスの静的メンバー変数と静的関数を参照します。多態性の動作と参照を抑制します。サブクラスでカバーされる実装ではなく、現在のクラスの機能;
slot
これらのキーワードのうち、This のみが必要です。強迫性障害は、非常に不快であることを意味します;
静的メンバー関数では、$this-> を介して非静的メンバー関数を呼び出すことはできませんが、呼び出すことはできます。 self:: を通じて呼び出され、関数を呼び出す前に $this-> を使用しなくてもスムーズに実行できます。この動作は PHP バージョンによって動作が異なるようですが、現在の 7.3;
では問題ありません。在静态函数和非静态函数中输出self,猜猜结果是什么?都是string(4) "self",迷之输出;
return $this instanceof static::class;会有语法错误,但是以下两种写法就正常: $class = static::class; return $this instanceof $class; // 或者这样: return $this instanceof static;
所以这是为什么啊?!
$class = static::class;
return $this instanceof $class;
// 或者这样:
return $this instanceof static;
推荐教程:《PHP视频教程》
以上がPHPのselfキーワードの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。
