この記事は主に PHP のマジックメソッドとマジック定数を紹介しています。必要な友達に参考にしてもらいましょう
は、コンストラクタメソッドと対になっており、コンストラクタメソッドはオブジェクトが「誕生」するときに自動的に呼び出され、デストラクタメソッドはオブジェクトが「消滅」するときにシステムによって自動的に呼び出されます。 !
1、
unset関数を明示的に使用して変数を破棄します
2、スクリプトが消滅した後。実行が終了すると、また自動的に破棄されます
3、オブジェクト変数の値を変更すると、それも自動的に破棄されますデストラクタメソッドの役割
主な役割は解放することですオブジェクトによって占有される追加のリソース!物体そのものではなく!
注:
1、から___2から始まります。
phpには上記3つの特徴を同時に満たすメソッドがたくさんあり、それらは「マジックメソッド」と呼ばれています!
__clone()このマジックメソッドはオブジェクトのクローン作成時に自動的に呼び出されます
オブジェクトのクローン作成時にこのマジックメソッドが自動的に呼び出されます!新しいクローンオブジェクトの初期化を担当します。
__set()
アクセスできないプロパティに値を割り当てる:
__set()
__set()マジックメソッドを定義すると、
このマジックメソッドには 2 つのパラメータが必要です: 1 つはアクセスできない属性の属性名です
1 つはアクセスできない属性の値です アクセスできないプロパティの値を取得します: __get() 定義後__get() マジックメソッドでは、がアクセスできない属性の値を取得すると、が自動的にメソッドを実行します。このとき、処理能力はユーザー自身に与えられます。 この魔法のメソッドには、属性の属性名であるパラメーターが 1 つだけ必要です。 注: __getと__set 実際のプロジェクトでは両方のメソッドがペアで使用されることがよくあります。さらに、これら 2 つのメソッドは、オブジェクトのプライベート プロパティをバッチで処理するためによく使用されます。 上記のコードは、属性の元の内部構造が変更されないように、ユーザーによる属性の追加を制限することもできます。 アクセスできない属性を削除します: __unset() unset 関数を渡すことができます パブリック属性を削除しますオブジェクトの: ただし、属性がアクセスできない場合 (private または存在しない場合)、削除できるかどうかは __unset メソッドが自動的に実行されます。 __unsetの内部実装について このメソッドにも必要なパラメーターは、現在削除されている属性の名前である 1 つだけです。 __unsetで何も行わなかった場合、デフォルトでは削除できません(もちろんエラーは報告されません!) アクセスできない属性が存在するかどうかを判断します: __isset() 属性がアクセスできない属性の場合、属性が存在するかどうかを判断するときに、このメソッドの実行が自動的にトリガーされます。 同様に、このメソッドにもパラメーター、つまりテクノロジーが現在決定する必要がある属性名が必要です。 アクセスできないオブジェクトメソッド(非静的メソッド)が呼び出されたとき、マジックメソッドが自動的に実行されます! 考えてみます: 現時点で、このマジックメソッドにはいくつのパラメータが必要ですか? パラメータ 1: メソッド名、stringtype パラメータ 2: arraytype、パラメータの数が不確実であるため、すべてのパラメータを配列に入れることしかできません このメソッドが何もしない場合: アクセスできないクラスメソッド(静的メソッド)を呼び出すと、マジックメソッドは自動的にこのメソッドを定義するときは、メソッド名の前に static キーワードを追加する必要があります。これは、メソッドが静的メソッドである必要があるためです。 小さなケース 次の目的を達成するために数学クラスを設計します: メソッドf1: 1を呼び出す、1パラメータが渡された場合、それらの値を返す平方根の合計 2、2パラメータが渡された場合、平方和 3パラメータが渡された場合、立方体の合計が返されます __invoke() 前に学んだ匿名関数を思い出してください:
注: $func を使用してクロージャ オブジェクトで関数を正常に呼び出すことができる理由は、関数があるためです。クロージャオブジェクト内で__invokeMagicメソッド そして、このメソッドの戻り値は、通常、オブジェクトを文字列にシリアル化した結果である可能性があります。 実際、この時点でシステムは __toStringこのメソッドの実行を自動的にトリガーします:
selfとの違いに注意してください: self __CLASS__は単なるクラス名です(クラス名は単なるクラス名です) )
ファイルのフルパスとファイル名。インクルードされたファイル内で使用された場合、インクルードされたファイルの名前を返します。 __DIR__ ファイルが配置されているディレクトリ。インクルードされたファイル内で使用された場合、インクルードされたファイルが配置されているディレクトリを返します。 dirname(__FILE__)と同等です。ルート ディレクトリでない限り、ディレクトリ名には末尾のスラッシュは含まれません。 __FUNCTION__ 関数名。この定数は、関数が定義されたときの関数の名前を返します (大文字と小文字は区別されます)。 __CLASS__ この定数は、クラスが定義されたときの名前を返します (大文字と小文字が区別されます)。 PHP 5.4 以降、__CLASS__ はトレイトに対しても機能することに注意してください。特性メソッド内で使用される場合、__CLASS__ は特性メソッドを呼び出すクラスの名前になります。 __TRAIT__ トレイトの名前。 PHP 5.4 以降、この定数は定義されたとおりの特性の名前を返します (大文字と小文字が区別されます)。トレイト名には、それが宣言されているスコープが含まれます (例: FooBar)。 __METHOD__ クラスのメソッド名 (PHP 5.0.0 で新しく追加されました)。定義されたとおりのメソッド名を返します (大文字と小文字が区別されます)。 __NAMESPACE__ 現在のネームスペースの名前 (大文字と小文字が区別されます)。 __get()アクセスできないプロパティの値を取得します
__unset()アクセスできない属性を削除します
__isset() アクセスできないかどうかを判断します属性が存在します
__call()アクセスできないオブジェクトメソッド(非静的メソッド)が呼び出されたとき
__callstatic() アクセスできないクラスメソッド(静的メソッド)を呼び出す
オブジェクトを関数 (またはメソッド) として呼び出すと、マジック メソッドが自動的に実行されます。現在ではあまり使われていません!
オブジェクトを文字列として使用すると、模倣メソッドが自動的に実行されます。
マジック定数
__CLASS__は現在のクラス名を表します!
は現在のメソッド名を表します!
いくつかのPHP「マジック定数」
名前
説明 __LINE__
ファイル内の現在の行番号。
__ファイル__
以上がPHP のマジック メソッドとマジック定数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。