ホームページ  >  記事  >  バックエンド開発  >  phpマジックメソッドの機能は何ですか?

phpマジックメソッドの機能は何ですか?

王林
王林オリジナル
2020-09-11 15:19:364004ブラウズ

php のマジック メソッドと関数は次のとおりです: 1. __get、未定義の属性を呼び出す; 2. __set、未定義の属性に値を割り当てる; 3. __call、未定義のメソッドを呼び出す; 4. __autoload、未定義クラスが自動的に呼び出されます; 5. __clone、オブジェクトをコピーします。

phpマジックメソッドの機能は何ですか?

魔法のメソッドと関数は次のとおりです:

(推奨チュートリアル: php ビデオ チュートリアル)

1. __get および __set

これら 2 つのメソッドは、クラスおよびその親クラスで宣言されていないプロパティ用に設計されています。

__get( $property ) 未定義のプロパティを呼び出す場合、このメソッドは未定義のプロパティに値を割り当てるときに

__set( $property, $value ) が呼び出されたときにアクセスされます。

ここには、protected および private のアクセス制御を持つプロパティ (つまり、 、権限なし) アクセスされたプロパティ)

2、__isset、__unset

__isset( $property ) このメソッドは、未定義のプロパティ

## に対して isset() 関数が呼び出されたときに呼び出されます。 #__unset ($property) このメソッドは、未定義のプロパティで unset() 関数が呼び出されたときに呼び出されます。

__get メソッドおよび __set メソッドと同じです。ここには、アクセス制御が保護されている属性を含む宣言はありません

3. __call

__call( $method, $arg_array ) このメソッドは、未定義 (アクセス権限のない属性を含む) を呼び出すときに呼び出されます。 ) method

4. __autoload

##__autoload 関数は、まだ定義されていないクラスを使用する場合に自動的に呼び出されます。この関数は、PHP がエラーで失敗する前に、スクリプト エンジンに必要なクラスをロードする最後のチャンスを与えます。

注: __autoload 関数でスローされた例外は、catch ステートメント ブロックではキャッチできず、致命的なエラーが発生します。

5, __construct, __destruct

__construct コンストラクター、このメソッドはオブジェクトの作成時に呼び出されます。利点は、クラスの名前に関係なく、コンストラクターに一意の名前を付けることができることです。これは、クラスの名前を変更するときに、コンストラクター メソッド __destruct デストラクター メソッドの名前を変更する必要がないようにするためです。PHP は、オブジェクトが破棄される前にこのメソッドを呼び出します (つまり、 、メモリからクリアされる前)

デフォルトでは、PHP はオブジェクトのプロパティによって占有されているメモリのみを解放し、オブジェクトに関連付けられたリソースを破棄します。デストラクタを使用すると、オブジェクトの使用後に任意のコードを実行してメモリをクリアできます。 、スクリプトがオブジェクトに関連していないと PHP が判断すると、デストラクターが呼び出されます。関数の名前空間内では、これは関数が返されたときに発生します。グローバル変数の場合、これはスクリプトの最後に発生します。オブジェクトを明示的に破棄するには、オブジェクトを指す変数に他の値を割り当てることができます。通常は、変数に NULL を割り当てるか、unset を呼び出すことによって行われます。

6, __clone

PHP5 のオブジェクト割り当てでは参照割り当てが使用されます。clone メソッドを使用してオブジェクトをコピーすると、オブジェクトは自動的に __clone マジック メソッドを呼び出します。一部の初期化操作は次のように実装できます。 __clone メソッド。

7, __toString

__toString メソッドは、オブジェクトを文字列に変換するときに自動的に呼び出されます。たとえば、echo を使用してオブジェクトを出力するとき、クラスがこのメソッドを実装していない場合、オブジェクトはエコーでは出力できません。そうでない場合は、「キャッチ可能な致命的なエラー: クラス テストのオブジェクトを文字列に変換できませんでした。このメソッドは文字列を返す必要があります。」と表示されます。

PHP 5.2.0 より前では、__toString メソッドは echo() または print() と組み合わせて使用​​した場合にのみ有効でした。 PHP 5.2.0 以降では、任意の文字列環境 (%s 修飾子を使用した printf() など) で有効になりますが、非文字列環境 (%d 修飾子の使用など) では使用できません。 PHP 5.2.0 以降、__toString メソッドが定義されていないオブジェクトが文字列に変換されると、E_RECOVERABLE_ERROR エラーが報告されます。

8, __sleep, __wakeup

__sleep シリアル化するときは __wakeup を使用し、逆シリアル化中に

serialize() を呼び出して、class_ _sleep 関数にマジック名があるかどうかを確認します。その場合、関数はシリアル化の前に実行されます。これはオブジェクトをクリアし、シリアル化する必要があるオブジェクト内のすべての変数の名前を含む配列を返す必要があります。

__sleep を使用する目的は、オブジェクトが持つデータベース接続を閉じたり、保留中のデータを送信したり、同様のクリーンアップ タスクを実行したりすることです。さらに、この機能は、完全に保管する必要のない非常に大きなオブジェクトがある場合にも役立ちます。

対照的に、unserialize() は、マジック名 __wakeup を持つ関数の存在を確認します。この関数は、オブジェクトが持つ可能性のあるリソースが存在する場合、それを再構築できます。 __wakeup を使用する目的は、シリアル化中に失われた可能性のあるデータベース接続を再確立し、他の再初期化タスクを処理することです。

9, __set_state

var_export() が呼び出されるとき、この静的メソッドが呼び出されます (PHP 5.1.0 以降で有効)。このメソッドの唯一のパラメータは、array('property' => value, ...) の形式で配置されたクラス プロパティを含む配列です。

10. __invoke

関数を呼び出してオブジェクトを呼び出そうとすると、__invoke メソッドが自動的に呼び出されます。 PHP5.3.0 以降のバージョン

11、__callStatic

で有効

これは __call() マジック メソッドと同様に機能します。__callStatic() は静的メソッド呼び出しを処理します。これは PHP5.3.0 以降で有効です。PHP は確かに __callStatic() メソッドの定義を強化しました。 public であり、 static として宣言する必要があります。同様に、__call() マジック メソッドは、他のすべてのマジック メソッドと同様に、パブリックとして定義する必要があります。

関連する推奨事項: php トレーニング

以上がphpマジックメソッドの機能は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。