2015-10-15 2 views
1

Я знаю, что это просто пример, и знает, почему вернуться 21, но не понимают, почему его работа на этом пути PHP:Возврата по ссылке увеличенного переменной

function increase(&$a) { 
     return $a++; // now i expect $a = 2, but return FIRST the reference (1), an increase later..? 
    } 

    $a = 1; 
    $b = increase($a); 

    echo $a.$b; 

Специального поведение с операторами и ByRef?

ответ

3

$a++ пост-инкрементации старое значение $a возвращается и не увеличивается значение.

, но в случае ++$a это предварительная инкрементация, значение $a увеличивается и новое значение возвращается.

Таким образом, в этом случае, если $a = 1 и вы $a++ он вернется 1, в то время как если вы используете ++$a он вернется 2.

+0

Теперь я понимаю, я пропустил это, думаю, что ++ $ x и $ x ++ это то же самое, но работает 1º возвращаемое значение и позднее увеличение. благодаря! – Zenth

3

Когда $a изначально 1, оператор пост-приращение функции говорит PHP Для возврата 1, а затем увеличить $a к 2 .... поэтому возвращаемая значение, присвоенное $b является 1; и по-ссылке гарантирует, что приращение $a является его новым значением в глобальной области.

Вы тогда конкатенации $a (теперь 2 после постинкремента) с $b (1) дает 21

Смежные вопросы