ホームページ  >  記事  >  バックエンド開発  >  phpのマジックメソッドのまとめ

phpのマジックメソッドのまとめ

WBOY
WBOYオリジナル
2016-06-13 13:08:24725ブラウズ

phpマジックメソッドのまとめ

php5 以降のバージョンでは、php クラスでマジック メソッドを使用できるようになりました。

PHP では、2 つのアンダースコア (__) で始まるメソッドはマジック メソッドとして予約されると規定されているため、既存のマジック メソッドをオーバーロードする場合を除き、関数名を __ で始めないことをお勧めします。

PHP のマジック メソッドは次のとおりです: __construct、__destruct、__call、__callStatic、__get、__set、__isset、__unset、__sleep、__wakeup、__toString、__set_state、__clone、__autoload

1、__get、__set

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

__get( $property ) このメソッドは、未定義のプロパティが呼び出されたときにトリガーされ、渡されるパラメーターはアクセスされるプロパティの名前です

__set( $property, $value ) このメソッドは、未定義のプロパティに値を割り当てるときにトリガーされます。渡されるパラメーターは、設定されたプロパティの名前と値です。

ここでの非宣言には、オブジェクトを使用して呼び出されたときにアクセス制御が保護されプライベートである属性 (つまり、アクセス許可がない属性) が含まれます。

2、__isset、__unset

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

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

__get メソッドおよび __set メソッドと同様に、ここでの no 宣言には、オブジェクトを使用して呼び出されたときにアクセス制御が保護されプライベートである属性 (つまり、アクセス許可のない属性) が含まれます

3.__電話

__call( $method, $arg_array ) このメソッドは、未定義のメソッドを呼び出すときに呼び出されます

ここでの未定義メソッドには、アクセス権限のないメソッドが含まれます。メソッドが存在しない場合は、親クラスに移動してメソッドを見つけます。親クラスに存在しない場合は、__call を呼び出します。このクラスの () メソッド。このクラスに __call() メソッドがない場合は、親クラスの __call() メソッドに移動します。


4. __自動ロード

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

グローバル オートロード クラスを定義する場合は、spl_autoload_register() メソッドを使用して、処理クラスを PHP 標準ライブラリに登録する必要があります。

?

プレーンに表示クリップボードにコピー印刷?
  1. クラス ローダー??
  2. {??
  3. static function autoload_class($class_name)??
  4. {??
  5. //正しい $class_name クラスを探してインポートします。そうでない場合は例外がスローされます ??
  6. }??
  7. }??
  8. ??
  9. /**
  10. *?? オブジェクトの自動読み込みを設定します
  11. *?? spl_autoload_register ― 指定された関数を __autoload() 実装として登録します
  12. */??
  13. spl_autoload_register(array('Loader', 'autoload_class')); ??
  14. ??
  15. $a = new Test();//テストは自動読み込みを行う必要なくインスタンス化されます。多くのフレームワークは、このメソッドを使用してクラス ??
  16. を自動的にロードします。
  17. ??
  18. ?>??

注: __autoload 関数でスローされた例外は、catch ステートメント ブロックではキャッチできず、致命的なエラーの原因となるため、関数自体でキャッチする必要があります。

5、__construct、__destruct

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

__destruct デストラクター メソッドの場合、PHP はオブジェクトが破棄される前 (つまり、メモリからクリアされる前) にこのメソッドを呼び出します。デフォルトでは、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

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

PHP5.3.0以降が有効です

11.__callStatic

これは __call() マジック メソッドと同様に機能します。__callStatic() は静的メソッド呼び出しを処理します。

PHP5.3.0以降が有効です

PHP は __callStatic() メソッドの定義を厳格化しています。メソッドは public でなければならず、static として宣言する必要があります。同様に、__call() マジック メソッドは、他のすべてのマジック メソッド

と同様に、パブリックとして定義する必要があります。

=========================================== === =====================

PHP は、__ (2 つのアンダースコア) で始まるすべてのクラス メソッドをマジック メソッドとして扱います。したがって、独自のクラス メソッドを定義する場合は、そのメソッドの先頭に __ を付けないでください。

?

1__construct()

オブジェクトをインスタンス化するとき、オブジェクトのコンストラクターが最初に呼び出されます。

php5同じオブジェクト モデルとクラス名を持つ関数がクラスのコンストラクターであることがわかります。その場合、コンストラクターと __construc( ) メソッド、php5 はデフォルトで __contruct() を呼び出し、同じ名前なので、 __contruct() がクラス になります。

?

2

__destruct()

デストラクターは、オブジェクトへのすべての参照が削除されるか、オブジェクトが明示的に破棄されるときに実行されます。

?

3

, __get(string $name)存在しないプロパティを読み取ろうとすると

が呼び出されます。オブジェクトに存在しないプロパティを読み取ろうとすると、php がエラーを返します。メッセージ。 __get メソッドをクラスに追加すると、この関数を使用して java でのリフレクションと同様のさまざまな操作を実装できます。

?

4, __set(string $name,mixed $value)

未定義の変数に値を代入するときに呼び出されます

?

5, __call(string $name, array $arguments)

アクセスできないメソッド (未定義、非表示など) を呼び出す場合、__call() が呼び出されます。

__callStatic(string $name, array $arguments)

静的メソッド内でアクセスできないメソッド (未定義、非表示など) を呼び出す場合、__callStatic() が呼び出されます。

?

6__toString()

は、オブジェクトを印刷するときに呼び出されます。このメソッドは、javatoString メソッドと似ています。この関数は、オブジェクトを直接印刷するときにコールバックされます。

?

7__clone()

オブジェクトが複製されるときに呼び出されます。

?

8__sleep()

serialize()この関数は、マジック メソッド __sleep があるかどうかを確認します。存在する場合は、__sleep( ) メソッドが最初に呼び出され、 が呼び出され、次にシリアル化操作が実行されます。この関数を使用すると、オブジェクトをクリーンアップし、オブジェクト内のすべての変数の名前を含む配列を返すことができます。メソッドが何も返さない場合、NULL がシリアル化され、結果として E_NOTICE が返されます。 エラー。 __sleep メソッドは、コミットされていないデータや同様の操作を送信するためによく使用されます。同時に、この機能は、保存する必要のない大きなオブジェクトがある場合に非常に便利です。

?

9__wakeup()

は、__sleep() unserialize() の逆です。 __wakeup メソッドがあるかどうかを確認します。存在する場合、 __wakeup メソッドが最初に呼び出され、オブジェクト データを事前に準備します。 __wakeup は、データベース接続の再確立やその他の初期化操作の実行など、逆シリアル化操作でよく使用されます。


10__isset()

未定義の変数 isset() または を呼び出す場合 empty()、__isset() が呼び出されます。

?

11__unset()

unset は、オブジェクトのプロパティが設定解除されるときに呼び出されます。例: unset($c->name)

?

12__set_state()

var_export を呼び出すときに呼び出されます。 __set_stateの戻り値をvar_exportの戻り値として使用します。

?

13__autoload()

オブジェクトをインスタンス化する際、対応するクラスが存在しない場合、このメソッドが呼び出されます。簡単に言えば、クラス;PHP未編成のクラスを使用しようとしたときの自動読み込みです。 、この関数が存在する場合は、__autoload グローバル関数 を検索します。 ,PHP はパラメーター を使用して呼び出します。 パラメーターはクラスの名前です。 ?

14

__invoke() 関数を呼び出してオブジェクトを呼び出そうとすると、__invoke

メソッドが自動的に呼び出されます。 ?

魔法定数

:

__LINE__

ファイル内の現在の行番号。

? __FILE__

ファイルの絶対パスとファイル名。インクルードされたファイル内で使用された場合、インクルードされたファイルの名前を返します。

PHP 4.0.2 以降、__FILE__ には常に絶対パス (シンボリック リンクの場合は解決された絶対値) が含まれます。パス)、以前のバージョンには相対パスが含まれる場合がありました。 ? __DIR__

ファイルが配置されているディレクトリ。インクルードされたファイル内で使用された場合、インクルードされたファイルが配置されているディレクトリを返します。これは、

dirname(__FILE__) と同等です。ルート ディレクトリでない限り、ディレクトリ名には末尾のスラッシュは含まれません。 (PHP 5.3.0 の新機能) =? __FUNCTION__

関数名 (

PHP 4.3.0 で新しく追加された )。 PHP 5 以降、この定数は定義されたときの関数の名前を返します (大文字と小文字は区別されます)。 PHP 4 では、値は常に小文字です。 ? __CLASS__

クラスの名前 (

PHP 4.3.0 の新機能 )。 PHP 5 以降、この定数は定義されたときのクラスの名前を返します (大文字と小文字は区別されます)。 PHP 4 では、値は常に小文字です。 ? __METHOD__

クラスのメソッド名 (

PHP 5.0.0 新規追加)。定義されたとおりのメソッド名を返します (大文字と小文字が区別されます)。 ? __NAMESPACE__

現在のネームスペースの名前 (大文字と小文字は区別されます)。この定数はコンパイル時に定義されます (

PHP 5.3.0 の新機能 ) ?

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