Функция. Передача по ссылке

Я наткнулся на следующее утверждение из руководства php

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

Переменные, то есть foo ($ a)

Новые операторы, то есть foo (new foobar ())

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

И вот пример, который не работает:

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

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

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

Это связано с этим отрывком из руководства:

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

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

1

Решение

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

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";

Это выводит ожидаемое.
6
5
На PHP 5.6.3

0

По вопросам рекламы [email protected]