PHP 5.1.0 - Fatal Error

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

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

(Заранее прошу прощения , если тема поднималась. По поиску не нашел)
 

si

Administrator
E_g
криво написанный код наконец перестал работать. многие почему-то считают что если код временно работает то в нем нет ошибок, это как раз такой случай.
 

svetasmirnova

маленький монстрик
Меня несколько достаёт теперь писать foo($temp = arry(1,2,...))
Но, с другой стороны, в PHP5 по ссылке объекты передаются по умолчанию, так что всё равно.
И передавать не переменные по ссылке бессмысленно.
 

E_g

Guest
Ну я бы сказал , что
PHP:
array_shift(explode('.', 'file.txt'))
или же подобный - не самое кривое, что может встретиться . Да и приходиться лишнюю переменную вводить. Да и притом , ладно бы вывоился notice ... а так прям аля "несовместимость версий" получается..
 

svetasmirnova

маленький монстрик
так в PHP5 чтобы переменные по ссылке передавались function foo(&$var) писать не надо. Достаточно function foo($var). Просто если этот BC оставить при дальнейших изменениях могут худшие вещи начаться.
 

si

Administrator
E_g
это совсем не правльный код, потому что array_shift должен удалять элемент из переменной, а там мы таковую не видим.
svetasmirnova
если foo хочет на вход &$params то прийдется, по логике и раньше тоже надо было так делать
 

Фанат

oncle terrible
Команда форума
пачитал.
там, вроде бы, всё преподробнейше объяснено
 

E_g

Guest
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.
В принципе очень верно сказано.

разве дыры так латают ?
 

si

Administrator
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
 

Screjet

Новичок
Вот еще до кучи:
PHP:
<?php                   
function a( &$a, &$b ){ 
}                       
                        
a(@$a,@$b);             
?>
У кого как работает?
 

tony2001

TeaM PHPClub
@ - это оператор.
соотв-но, @$var - это не переменная, а результат выражения.
 

DiTHER

bang bang
а в чем смысл? Как передать по ссылке "чтото" что не существует вовсе?

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

p.s. в 5.05 тоже есть.
p.p.s. обновил на серваке до 5.05, в глубях вылезло несколько ошибок. И только потом доперло насколько глупыми были все из них.. имхо - гут.
 

Sad Spirit

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