ホームページ > php教程 > php手册 > PHP 5.3 の新しいマジック メソッド __invoke

PHP 5.3 の新しいマジック メソッド __invoke

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-21 08:53:43
オリジナル
1106 人が閲覧しました

PHP5.3 では、__invoke と呼ばれる新しいマジック メソッドが追加されており、インスタンスを作成した後、オブジェクトを直接呼び出すことができます。

クラス testClass

{

パブリック関数 __invoke

{

「hello world」を出力します;

}

}

$n = new testClass;

$n();

実行結果は次のとおりです:

こんにちは、世界。

公式の例

クラス CallableClass

{

パブリック関数 __invoke($x)

{

var_dump($x);

}

}

$obj = 新しい CallableClass;

$obj(5);

var_dump(is_callable($obj));

?>

添付ファイル: PHP のその他のマジックメソッドの詳細な説明

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

関数名 __construct、__destruct、__call、__callStatic、__get、__set、__isset、__unset、__sleep、__wakeup、__toString、__invoke、__set_state、__clone は、PHP クラスでは魔法のようなものです。これらの名前の関数をどのクラスにも含めることはできません。それらに関連付けられた魔法の機能が必要な場合を除きます。

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

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

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

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

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

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

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

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

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

◆__destruct デストラクター メソッド、PHP はオブジェクトが破棄される前 (つまり、メモリからクリアされる前) にこのメソッドを呼び出します。デフォルトでは、PHP はオブジェクトのプロパティによって占有されているメモリのみを解放し、オブジェクト関連のリソースを破棄します。デストラクタを使用すると、オブジェクトの使用後に任意のコードを実行してメモリをクリアできます。スクリプトがオブジェクトに関連付けられなくなったと PHP が判断すると、デストラクターが呼び出されます。

関数の名前空間内では、関数が返されるときにこれが発生します。グローバル変数の場合、これはスクリプトの最後に行われます。オブジェクトを明示的に破棄したい場合は、そのオブジェクトを指す変数に他の値を割り当てることができます。通常は、変数を null に割り当てるか、unset を呼び出します。

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

__tostring メソッドは、オブジェクトを文字列に変換するとき (echo を使用してオブジェクトを出力するときなど)、自動的に呼び出されます。

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

◆__wakeup はデシリアライズ中に呼び出されます

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

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

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

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

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

PHP は __callstatic() メソッドの定義を強化しており、パブリックである必要があり、静的に宣言する必要があります。同様に、__call() マジック メソッドは、他のすべてのマジック メソッドと同様に、パブリックとして定義する必要があります。




関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
PHP 拡張子 intl
から 1970-01-01 08:00:00
0
0
0
phpのデータ取得?
から 1970-01-01 08:00:00
0
0
0
PHP GET エラー レポート
から 1970-01-01 08:00:00
0
0
0
phpを上手に学ぶ方法
から 1970-01-01 08:00:00
0
0
0
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート