2012-02-08 15 views
0

は、私が何かを比較するために使用しているので、のような単純な機能、phpの関数を参照して渡す?

function life($life) { 
    while($life) { 
     echo $life . '<br />'; 
     --$life; 
    } 
    return $life; 
} 
$life = life($user['lifeforce']); 
if($life) { ... } 

が、私は参照することにより、それを渡すか、それを忘れて、私が使っているものを使用する必要がありますか?それは良いことでしょうか...

function life(&$life) { 
    while($life) { 
     echo $life . '<br />'; 
     --$life; 
    } 
} 
life($user['lifeforce']); 
if($user['lifeforce']) { ... } 

私は、参照渡しの概念をあまり強調していませんか?まず

おかげ

+0

ここでは参照渡しが必要なようではありません。また、関数が呼び出されたときに変数が値を変更する可能性があることを覚えておく必要があるため、そうする必要がない場合はそうではありません。あなたがそれらを必要としない限り、通常はphpの参照を参照する方がはるかに良いです。 – hackartist

+1

私が把握しようとしているのは、それらを使用する必要があるときです。彼らのために良い使用はいつですか? – cgwebprojects

+0

もしあなたが巨大な配列を持っていて、両方をメモリにコピー&ホールドするには大きすぎるなら、それはそれに値するかもしれません。例えばprint_rはそれらを使用しませんが、var_dumpはメモリを完全に埋める配列を持っている場合はvar_dumpを使う必要があります。 – hackartist

答えて

1

あなたはphp manual on referencespassing by referenceについて特に一部を読むことを確認してください。

簡単な例:

function integer_division($number, $divider, &$remain){ 
    $remain = $number%$divider; 
    return floor($number/$divider); 
} 

$remain = 0; 
$result = integer_division(5, 2, $remain); 
// $remain now contains 1 

あなたが値元の変数に変更しようとする場合にのみ、あなたは、参照を使用する必要があります(例えば、配列のソート機能のためにそのように動作)、またはあなたは1つの以上の値を返す必要がある(と返します配列は悪いオプションです)。

あなたの質問に直接答えるには、おそらく最初の方法を使用するべきです(ユーザーライフに0を持たない場合を除きます)。

+0

私は参照渡しに変更する必要があります私のコードで配列を返す多くの関数がありますか?これは助けてくれました:) – cgwebprojects

+0

@cgwebprojectsこれは別の質問に値するが、一般的に、複数の値を返すために参照を使うときは、配列を返すときに '1..N'スカラーの場所を割り当てる必要があるかどうかにかかわらず、 (後で使用される複雑なオブジェクトを返すことはまったく別物です)私は実際にオーバーヘッドがどのようなものになるか、そして関数を書き直す価値があるかどうかは分かりません。私は 'class A {function getResultPartA();}が好きです。関数getResultPartB();関数calculateResult();} '...この答えのために変更しないでください。別の質問をしてください。 – Vyktor

+0

ありがとう、私はそれらを今のままにしておきます、私のコードは遅くないですか、なぜそれを変更しますか? – cgwebprojects

関連する問題