2016-07-19 9 views
-1

最近私は魔法の機能について読んできましたが、私はその実装について本当に混乱しています。 __contruct()__destruct()などのMagic機能は非常に便利です。 __construct()のようなマジック関数を使用して、デフォルト値で変数を初期化することができます。PHPのマジック関数とその使用法?

しかし、私は実際にのような他の魔法の機能の実装と混同しています。マジック機能を実装する実際の目的は何ですか?

はい、私はそれらが舞台裏で呼び出され、関数呼び出しを必要としないことを理解していますが、実際のところ、セキュリティSQLインジェクションスコープの点で、主な利点は何ですか? isset()__isset()(または他のマジックファンクション)の主な違いと、それらを使用する必要がある状況について教えてください。

+3

[マジックメソッド]を見てください(http://php.net/manual/en/language.oop5.magic.php) –

+0

'__toString()'は 'echo $ class'を実行するときですhttps:// repl.it/Cd6w/1 –

+0

@bubはい、私はやったが、私はまだ実世界でその使用を見つけることはありません。あなたはリンクを掲示する代わりに説明できますか?いくつかの例と説明が良いでしょう。 –

答えて

3

文書化された魔法の機能を必要としない限り、PHPでは魔法を使用しないでください。

これらの特定のオブジェクトを使用すると、特定のイベントに反応することができます。これは、オブジェクトに特定のことが起こったときに、そのインスタンスでどのように反応すべきかを定義できることを意味します。

これらのメソッドはそれぞれ自動的にトリガされ、これらの状況で何が起こるべきかを定義しています。

おそらく、オブジェクトを扱うときに__construct()__destruct()以外のものを使用する必要はありません。

__construct() - オブジェクトが初めて作成されたときに呼び出されます。パラメータと依存関係を注入して、オブジェクトを設定することができます。

__destruct() - オブジェクトが破棄されたときに呼び出されます。ここにクリーンアップコードを書くことができます。開いているデータストリーム、データベース接続などを閉じます。

__get() - プロパティの取得リクエストをリッスンします。

__set() - プロパティの要求をリッスンします。

__isset() - オブジェクトのプロパティでisset()またはempty()を呼び出すとトリガーされます。

__unset() - オブジェクトのプロパティでunset()を呼び出すとトリガされます。

__toString() - オブジェクトが文字列のように扱われたときの動作を定義できます。

__sleep() - ここで定義されているコードは、serialize()を使用する前に実行されます。したがって、オブジェクトのどのプロパティをシリアル化するかを定義できます。

__wakeup() - これは、シリアル化中に停止する可能性のあるタスクを再初期化するために使用されます。

__invoke() - あなたがクラスを "起動"し、それを関数のように使用する場合のクラスの振る舞いを定義します。

__clone() - オブジェクトのクローン作成が完了するとトリガーされます。 (あなたがあなたのオブジェクトをコピーしても、それらはまだそれを参照しているので、オリジナルにリンクされています。)

__debugInfo - オブジェクトに対してvar_dump()を使用するとトリガーされます。ダンプに表示する情報の種類を制御するために使用することができます。メソッドがオブジェクトに定義されていない場合は、public、protected、およびprivateのすべてのプロパティが表示されます。

+0

例えば、変数/オブジェクトが存在するかどうかを確認するためにisset()を使用するとします。自分自身の__isset()を書くと、isset()のデフォルトの動作を変更できますか? –

+0

C++でちょっとした演算子のオーバーロードがありますか? –

+0

はい。 __isset()は、isset()の結果を取得し、適切に出力を操作できます。 – PockeTiger

関連する問題