2015-01-14 2 views
1

я наткнулся на следующее утверждение из PHP ManualФункция. Передача по ссылке

Следующие вещи могут быть переданы по ссылке:

переменных, т.е. Foo ($ а)

Новые заявления , т.е. foo (новый foobar())

Ссылки, возвращаемые с функций, т.е.

А вот пример того, что не работает:

<?php 
function foo(&$var) 
{ 
    $var++; 
} 
function bar() 
{ 
    $a = 5; 
    return $a; 
} 
foo(bar()); 

Я пытаюсь понять, почему это не работает.

bar() возвращает значение '5' по значению, которое ссылается на foo(), поэтому почему PHP не допускает такого поведения?

Является ли это связано с этой выдержке из руководства:

Никакие другие выражения не должны передаваться по ссылке, так как результат не определен. Например, следующие примеры прохождения по ссылке недействительны

Однако для меня это не имеет смысла, так как, бар() возвращает фактическое значение, не определено.

+2

Что такое '5', который возвращается из bar()? Это просто ценность. Это не переменная, которая может быть передана по ссылке на foo(). Это значение, ожидающее присвоения некоторой переменной, и только тогда будет иметь ссылку. –

+0

Да, но обычно, когда вы проходите по ссылке, вы хотите продолжать использовать ее (используя переменную). P.S: Путем 5.3+ (или smth), проходящего по ссылке, удаляется (для переменных) –

+2

@KA_lin - __call time__ pass by reference устарел в 5.3 (и удален в 5.4); __pass by reference__ все еще разрешен –

ответ

0

только переменные должны быть переданы по ссылке, так что это будет работать

function foo(&$var) 
{ 
    $var++; 
} 
function bar() 
{ 
    $a = 5; 
    return $a; 
} 
$a = bar(); 
foo($a); 
var_dump($a); 
0

Там нет ничего плохого ... вот ваш пример немного более завершен.

function foo(&$var) 
{ 
    $var++; 
    return $var; 
} 
function bar() 
{ 
    $a = 5; 
    return $a; 
} 
echo foo($a=bar())."\n"; 
echo $a . "\n"; 

Он выдает ожидаемое. На PHP 5.6.3

+0

Можете ли вы объяснить, почему во втором случае $ a = 5? Разве это не должно быть 6, потому что foo() увеличивается по ссылке? –

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