8

いたるところで混合信号を受信して​​います。

アンパサンドを使用して変数を参照渡しするかどうか

次のリンクは、非推奨であり、不要になったことを示しているようです:
http://gtk.php.net/manual/en/html/tutorials/tutorials.changes.references.html

しかし、このようなスレッドは不思議に思います:
Call-time pass-by-reference は非推奨ですか?
PHP とアンパサンド

例として私の質問を言いましょう。

PHP 5.5.5 を使用して関数を作成すると、次のようになります。

function recurring_mailer_form($form, $form_state) 
{

}

それは次と同じですか:

function recurring_mailer_form($form, &$form_state) 
{

}

?

4

3 に答える 3

3

いいえそうではありません。

  • オブジェクトは常に参照として自動的に渡されます (情報!追加の重要な情報については以下を参照してください!)

  • パラメータを参照として宣言することは、関数定義で行う必要があります。

    function test(&$var) {}
    

    呼び出し時ではありません:

    // wrong
    $var = '123';
    test(&$var);
    


通常どおりオブジェクトを渡すと、オブジェクトの状態 (プロパティ) を変更できます。 と呼ばれるメンバー変数を含むクラスのインスタンスである
と仮定します(完全なサンプルについては、Ideone.com でここをクリックしてください)。$objTestClasshello

function modify($obj) { $obj->hello = 'world (modified)!'; }

$obj->hello = 'world';
modify($obj);
var_dump($obj->hello);  // outputs "world (modified!)"

これは一目瞭然です。ここで、同じコードを使用して別の値を代入し$objてオブジェクトの状態を変更すると、結果は変更されません ( → Ideone.com ):

function modify($obj) { $obj = 42; }
// ...
var_dump($obj->hello);  // outputs "world"

パラメータを参照として明示的に受け入れるだけで、変数の内容を完全に変更することができます ( → Ideone.com ):

function modify(&$obj) { $obj = 42; }
// ...
var_dump($obj);         // outputs "42"
于 2013-11-07T22:18:38.277 に答える