PHP 5.1.0 - Fatal Error

  • Автор темы Автор темы E_g
  • Дата начала Дата начала

E_g

Guest
PHP 5.1.0 - Fatal Error

http://bugs.php.net/bug.php?id=33495&edit=1 -
Fatal error: Only variables can be passed by reference with

Граждане , хотелось бы узнать Ваше мнение по поводу этого нововведения.

(Заранее прошу прощения , если тема поднималась. По поиску не нашел)
 
E_g
криво написанный код наконец перестал работать. многие почему-то считают что если код временно работает то в нем нет ошибок, это как раз такой случай.
 
Меня несколько достаёт теперь писать foo($temp = arry(1,2,...))
Но, с другой стороны, в PHP5 по ссылке объекты передаются по умолчанию, так что всё равно.
И передавать не переменные по ссылке бессмысленно.
 
Ну я бы сказал , что
PHP:
array_shift(explode('.', 'file.txt'))
или же подобный - не самое кривое, что может встретиться . Да и приходиться лишнюю переменную вводить. Да и притом , ладно бы вывоился notice ... а так прям аля "несовместимость версий" получается..
 
так в PHP5 чтобы переменные по ссылке передавались function foo(&$var) писать не надо. Достаточно function foo($var). Просто если этот BC оставить при дальнейших изменениях могут худшие вещи начаться.
 
E_g
это совсем не правльный код, потому что array_shift должен удалять элемент из переменной, а там мы таковую не видим.
svetasmirnova
если foo хочет на вход &$params то прийдется, по логике и раньше тоже надо было так делать
 
пачитал.
там, вроде бы, всё преподробнейше объяснено
 
It makes since to be able to take the return value from a function call
and use it in another function call all languages including PHP allow
you to do so in cases where the return value is useful.

Removing this ability not only breaks compatability with both PHP 4.0.x,
4.1, 4.2, 4.3 and 5.0.x but it also makes PHP itself hardware to use in
this case and results in bulkier code without need.
В принципе очень верно сказано.

разве дыры так латают ?
 
E_g
еще раз - код этот с ошибкой и он перстал работать, раньше он работал случайно по не доработке програмистов которые делают РНР. они свои ошибки поправили, теперь должны свои ошибки поправить авторы кривых скриптов.

-~{}~ 08.09.05 10:32:

как не странно такое на PHP5.1 работает
PHP:
<?php
	function &foo(){
		$str = "aaabbb";
		
		return $str;
	}
	
	function bar(&$str){
		return str_replace('b','c',$str);
	}
	
	$str = bar(foo());
	
	echo "str = $str\n";
        echo phpversion();
?>

Output:
str = aaaccc
5.1.0RC1
 
Вот еще до кучи:
PHP:
<?php                   
function a( &$a, &$b ){ 
}                       
                        
a(@$a,@$b);             
?>
У кого как работает?
 
@ - это оператор.
соотв-но, @$var - это не переменная, а результат выражения.
 
а в чем смысл? Как передать по ссылке "чтото" что не существует вовсе?

хороший пинок в сторону смысла ООП. И высказвывания вроде "к чему это делать в языке который может конкантенировать строки и символы на лету?!" тут совсем не в тему.

p.s. в 5.05 тоже есть.
p.p.s. обновил на серваке до 5.05, в глубях вылезло несколько ошибок. И только потом доперло насколько глупыми были все из них.. имхо - гут.
 
Автор оригинала: Screjet
Вот еще до кучи:
PHP:
<?php                   
function a( &$a, &$b ){ 
}                       
                        
a(@$a,@$b);             
?>
У кого как работает?
код кривой: если переменные $a и $b до вызова не были определены, то ошибки и так не будет. а насчёт '@' tony2001 всё сказал...
 
Сверху