再考のデシリアライズ
我々はphpggc生成し、デシリアライゼーションポップ・チェーンを使用して最後の時間は、コード実行の成功の実装を利用し、プロセス全体の分析をすることができます。しかし、学習の姿勢に基づいて、私は自分のポップ可能なチェーンを見つけようとし始めました
Zendの\のLdap \コレクション
Closeメソッドを呼び出し、その後、closeメソッドのイテレータのプロパティを呼び出します。本方法は、対応するイテレータクラス属性を閉じていない場合には、__callメソッドは、クラスを呼び出します
Zendの\フィルターの\圧縮
getAdapterと呼ばれる第一の方法
最初の$ this - を決定>アダプターは、それが直接返された場合、\ CompressionAlgorithmInterfaceクラスを圧縮し、その後もクラス属性adapterOptionsを取得されていません
$アダプタクラスが存在する場合、ライン104は、新たな操作で実行され、かつ制御可能なパラメータ値のこのタイプは、利用することができ、コンストラクタのための私たちの次のルックスです
Zendの\バリ\コールバック
ライン55は、親クラスのコンストラクタを呼び出し
Zendの\バリ\ AbstractValidator
81ラインで直接見ると、$オプションの判断は、配列ではなく、その後、メソッドはsetOptionを呼び出し
オプション$ $ $オプションと名前、プラス名$正面から除去し、設定され、その後、クラスはメソッドが呼び出された含まれているかどうかを判断するために進みます。
isValidメソッドはZend \バリ\コールバッククラスがあります
139行call_user_func_array機能の有無、ここでは$ argsをの値は、我々は$ vaue値を渡されたということです。$コールバックを見ては、制御可能ではありません。$コールバック獲得
これは、内部ます$ this-> options配列から取られています。この値が設定されている方法を見て
上記の方法が設定されているので、我々はの$ this - 親クラスの>オプション[「コールバック」]は、setoptions値に値を割り当てることができます。だから我々はcall_user_func_array関数が制御されている2つのパラメータを持っている、あなたは、コード実行を実現することができます。
全体のプロセス
Zendの\のLdap \コレクション
__destruct()
- >
Zendの\のLdap \コレクション
$this->iterator->close()
->
Zend\Filter\Compress
__call()
->
Zend\Filter\Compress
getAdapter()
->
Zend\Validator\Callback
__construct
->
Zend\Validator\Callback
Parent:__construct
->
Zend\Validator\AbstractValidator
setOptions()
->
Zend\Validator\Callback
setCallback()
->
Zend\Validator\Callback
isValid()
调用栈
测试