Я наткнулся на следующее утверждение из руководства php
Следующие вещи могут быть переданы по ссылке:
Переменные, то есть foo ($ a)
Новые операторы, то есть foo (new foobar ())
Ссылки, возвращенные из функций, т.е.
И вот пример, который не работает:
<?php
function foo(&$var)
{
$var++;
}
function bar()
{
$a = 5;
return $a;
}
foo(bar());
Я пытаюсь понять, почему это не работает.
bar () возвращает ‘5’ по значению, на которое ссылается foo (), так почему же PHP не допускает такое поведение?
Это связано с этим отрывком из руководства:
Никакие другие выражения не должны передаваться по ссылке, так как результат
не определено. Например, следующие примеры передачи по ссылке
недействительны
Однако, для меня это не имеет смысла, потому что bar () возвращает фактическое значение, а не неопределенное.
Только переменные должны быть переданы по ссылке, так что это будет работать
function foo(&$var)
{
$var++;
}
function bar()
{
$a = 5;
return $a;
}
$a = bar();
foo($a);
var_dump($a);
В этом нет ничего плохого … вот ваш пример чуть более завершенный.
function foo(&$var)
{
$var++;
return $var;
}
function bar()
{
$a = 5;
return $a;
}
echo foo($a=bar())."\n";
echo $a . "\n";
Это выводит ожидаемое.
6
5
На PHP 5.6.3