2012-03-29 15 views
1
  1. 2つの同様の例と比較して、なぜ私に教えてください?
  2. 明確に説明してください。PHP関数 - 次の例と比較してください

    function inc(&$value, $amount = 1) { 
        $value = $value + $amount; 
        echo $value; //21 
    } 
    
    $val = 20; 
    inc($val); 
    echo "<br>$val"; //21 
    
    echo "<hr>"; 
    
    function incSec(&$value, $amount = 1) { 
        $value = $value + $amount; 
        echo $value; //21 
    } 
    
    incSec($valSec = 20); 
    echo "<br>$valSec"; //20 
    

私がテストしようとしているが、その理由を取得することはできません。

+2

簡単に読みやすいようにコードを書式/インデントしてください。 –

+0

テストしようとしているものは何ですか? – Nishant

答えて

0

は、あなたがこれらの行でエラーを取得している容疑者:

incSec($valSec = 20); 

これは通常、(それが$ valSecに20の割り当ての結果を渡しています、関数に$ valSecを渡していません成功した割り当て)。その結果の値は20です(成功したと仮定します)。しかし、変数ではなく、単なる結果です。

incSec関数()は、参照渡しの変数を期待するように定義されていますが、結果ではなく変数のみを参照できます。

+0

コールにエラーはありません。 PHPは代入の結果を変数なしの変数に効果的に代入し、その変数には変数なしで参照に渡します(言い換えれば、代入の結果をメモリ位置に保存し、そのメモリ位置のアドレスを関数に渡します)。関数が返った後、そのメモリ位置に格納された値は単に破棄されます。 –

+0

"厳格な標準:変数はPHPの –

+0

のバージョンに応じて、20行目のC:\ xampp \ htdocs \ a.phpの参照で渡す必要があります"可能性がありますが、警告に過ぎません。私はそのコードをテストし、それを取得していない(Mac OS XでPHP 5.3.8) –

6

最初に、投稿した2番目の例では、関数内の "21"と本体の "20" - 自分でテストします。

今、exlanationのために...最初に、明示的な量を関数に渡していないので、インクリメント量は常に1になります。

最初の例では、変数に値を割り当て、その変数を参照によって関数に渡し、関数で値をインクリメントします。関数はパラメータ "20"を受け取り、(デフォルト)量1でそれを戻し、結果 "21"を出力します。関数が復帰すると、(参照渡しされた)値がインクリメントされ、別の「21」が出力されます。

2番目の例では、変数に20を割り当て、その割り当ての結果を関数に渡します。結果は20になりますが、メモリ内の別の場所になります。関数の観点からは、値20のby-refパラメータを受け取り、それをインクリメントして結果を出力するので、 "21"となります。関数が返ってくると、関数の中に渡されたことのない変数の値が出力されます(つまりインクリメントされない)ので、 "20"が出力されます。

+1

私よりも良い説明 –

関連する問題