2014-03-24 56 views
0

我有這樣的代碼行....爲什麼這會導致錯誤?

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 ]) 

我試圖切換「與'在定義和使用變量而不是常量

我是否盲? 有人能解釋我最近怎麼了?

+0

不是真的一樣..這是同樣的錯誤,但不是我的問題......它的內飾相結合與空。 「重複」是從空處理,並說非修飾^^ – Dwza

+0

當google搜索到錯誤信息時,這個答案是#1 – mesutozer

回答

2

http://php.net/empty

在PHP 5.5之前,empty()只支持變量;其他任何東西都會導致解析錯誤。換句話說,以下內容不起作用:空(trim($ name))。相反,使用trim($ name)== false。

+0

omg ...這就是當你坐在代碼的8小時之前你會得到什麼......你將忘記閱讀有用的評論和提示! :D THX ... – Dwza

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

OR:

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

Empty實際上並不是一個函數 - 它是一種語言結構(類似於echo)。因此,PHP以不同的方式解析它。 Empty()只接受一個變量作爲參數。瞭解更多關於語言結構here.

因此,要回答你的問題,做這樣的事情:

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

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