为什么这会导致错误?

时间:2014-03-24 17:20:23

标签: php

我有这个代码行....

define('CSV_TEXTSIGN', '');

$var = ( empty( trim( CSV_TEXTSIGN ) ) ? '"' : CSV_TEXTSIGN );

这会导致错误

Fatal error: Can't use function return value in write context in... line XX

但只有有效的功能......

bool empty ( mixed $var )
string trim ( string $str [, string $charlist ] )

我试图在define中切换“with”并使用vars而不是常量

我是瞎子吗? 谁能解释我哪里出错?

3 个答案:

答案 0 :(得分:3)

来自PHP documentation

  

Prior to PHP 5.5, empty() only supports variables; anything else will result in a parse error. In other words, the following will not work: empty(trim($name)). Instead, use trim($name) == false.

所以你的代码可能如下:

$var = (!trim(CSV_TEXTSIGN) ? '"' : CSV_TEXTSIGN );

或者:

$trimed = trim(CSV_TEXTSIGN);
$var = empty($trimed) ? '"' : CSV_TEXTSIGN;

答案 1 :(得分:2)

来自http://php.net/empty

在PHP 5.5之前,empty()仅支持变量;其他任何东西都会导致解析错误。换句话说,以下将不起作用:empty(trim($ name))。相反,使用trim($ name)== false。

答案 2 :(得分:1)

空实际上并不是一个功能 - 它是一种语言结构(类似于回声)。因此,PHP以不同的方式解析它。 Empty()只接受变量作为参数。阅读有关语言结构的更多信息here.

所以,回答你的问题,做一下这样的事情:

define('CSV_TEXTSIGN', '"');
$trimmedVal = trim( CSV_TEXTSIGN );

$var = ( empty( $trimmedVal ) ? '"' : CSV_TEXTSIGN );