ホームページ >バックエンド開発 >PHPチュートリアル >PHP の 11 の魔法のメソッドを 1 分で理解する

PHP の 11 の魔法のメソッドを 1 分で理解する

慕斯
慕斯転載
2021-06-28 11:35:084568ブラウズ

PHP についてたくさんのことを学びました。PHP の 11 の魔法のメソッドを完全にマスターできたでしょうか。そうでない場合は、この記事に従って学習を続けてください

1, __get 、__set

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

    __get( $property ) このメソッドにアクセスします未定義のプロパティを呼び出すとき
  • #__set( $property, $value ) 未定義のプロパティに値を割り当てるときに呼び出されます
  • #ここでの no 宣言には、アクセス制御が保護されプライベートである属性が含まれます(つまり、アクセス権限のない属性)

2, __isset, __unset

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

    #unset( $property ) このメソッドは、unset() 関数が未定義のプロパティで呼び出されるときに呼び出されます
  • __get と同じですメソッドと __set メソッド。ここでの no 宣言には、アクセス制御が保護されプライベートである属性 (つまり、アクセス許可がない属性) が含まれます。 $method, $arg_array ) このメソッドは、未定義 (アクセス権限がないことを含む) メソッド

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

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

5, __construct, __destruct

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

__destruct デストラクター メソッド、PHPオブジェクトが破棄される前に、デストラクター メソッドが使用されます (つまり、メモリ コードをクリアする前にこのメソッドを呼び出してメモリをクリアします。スクリプトがオブジェクトに関連付けられなくなったと PHP が判断すると、デストラクターが呼び出されます。関数内で)名前空間の場合、これは関数が返されたときに発生します。グローバル変数の場合、これは発生します。スクリプトの最後で、オブジェクトを明示的に破棄したい場合は、オブジェクトを指す変数に他の値を割り当てることができます。通常は代入されます。変数を NULL に設定するか、unset を呼び出します。

6, __clone

  • PHP5 のオブジェクトの割り当てでは参照割り当てが使用されます。clone メソッドを使用してオブジェクトをコピーすると、オブジェクトは自動的に __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

__sleep はシリアル化中に使用され、

__wakeup は逆シリアル化中に呼び出されます。 serialize() は、クラス内にマジック名 __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 の 11 の魔法のメソッドを 1 分で理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。