私は、PHPの組み込み関数call_user_func_arrayを大量に使用する従来のコードベースを使用しています。私は(5.2からのアップグレード)それはPHP 5.3で動作するように取得しようとしているが、(「非配列を渡す」の項で)ここに記載されている問題に実行した:一言で言えば組み込みのPHP関数を拡張することはできますか?
http://sixohthree.com/1486/migrating-to-php-5-3-call_user_func_array
問題は、PHPのバージョン5.2と5.3の間で、この関数の実行は基本的に何もしないように変更され、2番目のパラメータが適切な配列/オブジェクト/連想配列でない場合はNULL
を返します。 5.2ではこれをしませんでした。そのため、私が扱っているコードベースでは、正しい型のパラメータを渡すように努力していません。これは問題を引き起こします。
これを修正するには、ブログ投稿の指示に従い、コードベースですべてのcall_user_func_array
コールを呼び出してパッチを当てることができますが、それは非常に面倒です。あるいは、PHPに組み込まれたoverride_function APIコールがあり、組み込み関数をオーバーライドするために使用できることに気付きました。それは便利ですが、私がやりたいことは組み込み関数を拡張するようなものです。 old_call_user_func_array
はビルトインcall_user_func_array
関数である...
function call_user_func_array($method, $params) {
$params = is_array($params) ? $params : array($params);
return old_call_user_func_array($method, $params);
}
:
は、理想的には私が好きなものをざっとようなものでcall_user_func_array
の実装を置き換えることができるようにすることです。
これは可能ですか?あれば、どうですか?
コードは文書化されたAPIに準拠していないため、本質的に壊れているので、パッチの上にパッチを重ねるのではなく、いつでもその関数のすべてのインスタンスをいつでも修正する必要があります。とにかく、一時的な回避策が必要な場合がありますので、+1してください。 :) – deceze
おそらく@stackoverflow.com/questions/4725194/php-override-existing-function – Nazariy
の複製@Nazariy - そのスレッドは古い関数を保持することを扱っていません。OPの質問をよく読んでください。 –