ホームページ  >  記事  >  バックエンド開発  >  PHPマジックメソッドのまとめ_PHPチュートリアル

PHPマジックメソッドのまとめ_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:12:54750ブラウズ

1、__get、__set

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

__get( $property ) 未定義のプロパティを呼び出すときにこのメソッドにアクセスします

__set( $property, $value ) は、未定義のプロパティに値を割り当てるときに呼び出されます。ここでの未宣言には、オブジェクトを使用して呼び出されたときにアクセス制御が保護されているプロパティ (つまり、アクセス許可のないプロパティ) が含まれます。

2、__設定、__解除

__isset( $property )

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

__unset( $property )

未定義の属性に対して unset() 関数を呼び出す場合、このメソッドの呼び出しは __get メソッドおよび __set メソッドと同じです。ここでの no 宣言には、オブジェクトを使用して呼び出されたときにアクセス制御が保護され、プライベートである属性が含まれます (つまり、アクセスされる属性はありません)。許可を得て)

3、__電話

__call( $method, $arg_array )

未定義のメソッドを呼び出す場合、このアクセスリクエストが呼び出されます。ここでの未定義のメソッドには、アクセス権限を持たないメソッドも含まれます

4、__自動ロード

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

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

5、__構築、__破壊

__construct コンストラクター。このメソッドは、オブジェクトの作成時に呼び出されます。このメソッドを使用する利点は、クラスの名前に関係なく、コンストラクターに一意の名前を付けることができることです。クラス名、コンストラクター名を変更する必要はありません

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

6、__クローン

PHP5 でのオブジェクトの割り当ては参照割り当てを使用します。オブジェクトをコピーする場合、このメソッドを呼び出すときに、オブジェクトは自動的に __clone マジック メソッドを呼び出します。オブジェクトは、_ _clone メソッドの実装で実行できます

7、__toString

__toString メソッドは、オブジェクトを文字列に変換するときに自動的に呼び出されます。たとえば、echo を使用してオブジェクトを出力する場合、クラスがこのメソッドを実装していない場合、オブジェクトは 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

逆シリアル化するときは、serialize() を呼び出して、クラス内にマジック名 __sleep を持つ関数があるかどうかを確認します。その場合、関数はシリアル化の前に実行されます。これはオブジェクトをクリアし、シリアル化する必要があるオブジェクト内のすべての変数の名前を含む配列を返す必要があります。 __sleep を使用する目的は、オブジェクトが持つデータベース接続を閉じたり、保留中のデータを送信したり、同様のクリーンアップ タスクを実行したりすることです。さらに、この機能は、完全に保存する必要のない非常に大きなオブジェクトがある場合に便利です。 逆に、unserialize() は、マジック名 __wakeup を持つ関数の存在をチェックします。この関数は、オブジェクトが持つ可能性のあるリソースが存在する場合、それを再構築できます。 __wakeup を使用する目的は、シリアル化中に失われた可能性のあるデータベース接続を再確立し、他の再初期化タスクを処理することです。

9、__set_state

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

10、__呼び出し

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

11、__callStatic

__call() マジック メソッドと同様に機能します。__callStatic() は静的メソッドの呼び出しを処理します。PHP は実際に __callStatic() メソッドの定義を強化しており、パブリックである必要があります。静的と宣言される。同様に、__call() マジック メソッドは、他のすべてのマジック メソッドと同様に、パブリックとして定義する必要があります。

http://www.bkjia.com/PHPjc/440423.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/440423.html技術記事 1. これら 2 つのメソッド __get と __set は、クラスとその親クラスで宣言されていないプロパティ用に設計されています。 __get( $property ) このメソッドは、未定義のプロパティ __set( $p.. .
) を呼び出すときにアクセスされます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。