这能否算一个bug

WBOY
Release: 2016-06-23 14:02:18
Original
778 people have browsed it

function &test(){    $data = 'test';        return (is_null($data) ? $data : $data);        if( is_null($data) )        return $data;    else        return $data;}$s = test();var_dump($s);
Copy after login

这个是为了说明我的意图,实际应用情况要复杂多。函数返回一个引用,然而我发现如果用三目运算符来表达,则PHP不能正确理解return,会出现
PHP Notice:  Only variable references should be returned by reference
Copy after login

而换用if,则一切正常。

不知道这个算不算是个bug,因为之前肯定有不少人发现,而且我所用的5.4.11, 5.5.0alpha4都出现了这个问题


回复讨论(解决方案)

另在手册找到:
Note: 注意三元运算符是个语句,因此其求值不是变量,而是语句的结果。如果想通过引用返回一个变量这点就很重要。在一个通过引用返回的函数中语句 return $var == 42 ? $a : $b; 将不起作用,以后的 PHP 版本会为此发出一条警告。

结贴

这不是 BUG!而是正确的文法解析
你 function &test() 声明函数返回的是一个引用。既然是引用,那么就要有被引用的载体。
而三目运算是结构,其结果必须赋值给真实的变量
$a = is_null($data) ? $data : $data;
return $a;
就不会出错了
当然 function test() 也不会出错

自 php5.3 起,很多早期的程序都会有这个问题

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template