2012-01-14 10 views
1

私はIs it possible to pass parameters by reference using call_user_func_array()?http://php.net/manual/en/function.call-user-func-array.phpを見ました。 call_user_func_array()を使用して参照渡しするための承認されたテクニックは、パラメータ配列を変数参照の配列にすることによるものと思われます。たとえば、$parameters = array(&$some_variable)と設定します。私の質問は、代わりに(参照ではなく)変数の配列をパラメータ配列にして、パラメータ配列全体を参照として渡すことができますか?これは、以下に示されている:機能toBeCalledを基準として第1の変数、および値としての第2を期待していることが変数参照の配列を渡すのではなく、call_user_func_array()を参照してパラメータ配列を渡すことはできますか?

function toBeCalled(&$parameter1, $parameter2) { 
    //...Do Something... 
} 

$changingVar = 'passThis'; 
$changingVar2 = 'passThisToo'; 
$parameters = array($changingVar, $changingVar2); 
call_user_func_array('toBeCalled', &$parameters); 

注意。私が尋ねる理由は、ここでの構文が便利で、動作するようです(DrupalのDruTexモジュールのこのPHP 5.3パッチを参照してください - http://drupal.org/node/730940#comment-4054054)が、私は専門家の意見をチェックしています。

+0

最初のバージョンを使用してください。これは動作するためです。後者はPHP 5.3でさえも(あるいはあなたのためにあなたの仕事をしましたか?)、とにかくPHP 5.4から禁止されます(強制的に渡された参照のためのZend memleaks)。 – mario

答えて

0

あなたは物事を参照ではなく配列に入れた瞬間、それらはコピーされます。後で配列を使って何をするにしても、(変数が偶数変数であった場合)元の変数には影響しません。

あなたがリンクしたものは関連性がないようです。これは、参照渡しの無意味な通話時間を削除しています。

+0

ありがとう@newacct、配列へのコピーについてのあなたの要点は、call_user_func_arrayが参照である要素(一見すると、呼び出し時渡しに対する制限に違反していると思われる)をなぜ必要とするかを明確にするのに役立ちます。 テスト後: '<?php 機能toCall(&$ var1、$ var2){ var_dump(func_get_args()); $ var1 = $ var1 * 5; $ var2 = $ var2 + 1; } $ x1 = 4; $ x2 = 5; $ params = array(); $ params [] = $ x1; $ params [] = $ x2; call_user_func_array( 'toCall'、&$ params); echo( '
'。$ x1); echo( '
'。$ x2); ?> ' はエラーを返します。 –

関連する問題