数日前、Qingyuan Education のウェブサイトでこのような記事を目にしました。これは私のような php 開発者にとって特に役立つと思います。また、Qingyuan の皆さんにも役立つことを願って投稿します。 Education の Web サイトにはこの種の技術記事がたくさんありますので、興味があればチェックしてみてください。さて、早速、本題に入りましょう:
PHP では、クラスのメソッド/変数にアクセスする方法が 2 つあります:
1. オブジェクト $object = new Class() を作成し、変数/メソッドがアクセス可能な場合は、「->」を使用して $object->attribute/function を呼び出します。
2. 静的か非静的かに関係なく、クラスのメソッド/変数 (class::attribute/function) を直接呼び出します。ただし、前提条件があります:
A. 変数の場合、その変数にアクセスできる必要があります。
B. それがメソッドの場合、メソッドがアクセス可能であることに加えて、以下を満たす必要もあります:
b1) 静的メソッドの場合、特別な条件はありません
b2) 非静的メソッドの場合は、メソッド内で $this を使用しないように変更する必要があります。つまり、非静的変数/メソッドは呼び出されません。もちろん、静的変数/メソッドを呼び出すことには問題はありません。方法。
それでは、$object->… の使用と class::…: の使用の違いを見てみましょう。
1. $object->… を使用する場合、コンストラクターを実行してオブジェクトを作成する必要があります
2. class::... を使用して、オブジェクトを作成するコンストラクターを実行せずに静的メソッド/変数を呼び出します。
3. class::... を使用して非静的メソッド/変数を呼び出します。オブジェクトを作成するためにコンストラクターを実行する必要はありません。
すると、2と3は同じなので、静的メソッド/変数の存在意義は何でしょうか?
以下に示すように、違いは依然として明らかに存在します:
1. 静的変数
静的メンバーは変数値を 1 つだけ保持し、この変数値はすべてのインスタンスに対して有効です。つまり、すべてのインスタンスがこのメンバーを共有します。
2. 静的メソッド
静的メソッドは class::... を使用して直接呼び出すことができますが、非静的メソッドは、前述したように、 class::... メソッドを使用して呼び出す前に特定の制限を満たす必要があります。
この記事が大多数の PHP 開発者にとって役立つことを願っています。この記事を読んでいただきありがとうございます。 php の技術的な問題について詳しくは、グループに参加して議論することを歓迎します: 256271784、検証コード: cxy、検証を書かないと合格しません~
|