2014-09-23 73 views
0

不能使用函數的返回值我有這樣的代碼檢查,如果issetMySQL數據和檢查INT:致命錯誤:在寫上下文

<input type="radio" name="lang" value="1" 
<?PHP if(isset(filter_var($__SQL__[0]['lang'], FILTER_VALIDATE_INT))){ 
     echo ($__SQL__[0]['lang'] == 1 ? ' checked="checked"' : '');}?> 
/> 

但我看到這個錯誤:

Fatal error: Can't use function return value in write context in 
C:\xampp\htdocs\user\modules\editnews.php on line 56 

我該如何解決這個錯誤?

回答

1

這是PHP的限制。您正在使用isset(),這不是函數,而是language construct。你只能在5.5以前的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 .

這意味着,你需要做這樣的事情:

// We'll check if $__SQL__[0]['lang'] exists and 
// the filter_var succeeds. 
if (isset($__SQL__[0]['lang']) && filter_var($__SQL__[0]['lang'], FILTER_VALIDATE_INT) !== false) { 
    echo ($__SQL__[0]['lang'] == 1 ? ' checked="checked"' : ""); 
} 
1

如果有一些PHP的背後,問題可能是調用一個函數isset($ VAR)以這樣的方式

if(isset($var = getMyVar())) { ... } 
if(isset(filter_var($__SQL__[0]['lang'], FILTER_VALIDATE_INT))){ .. } 

取而代之的是你應該這樣調用它:

$var = filter_var($__SQL__[0]['lang'], FILTER_VALIDATE_INT); 
if(isset($var)) { ... } 

問題也導致其他類似的功能(空,is_a,is_null等)。

東西,可能會導致一些刺激性的事實是,你不能使用isset和空與功能:

isset(myFunction()) 
empty(myFunction()) 

-> Fatal error: Can't use function return value in write context 

下面是檢查函數的返回值的正確方法:

if (myFunction() !== null) -> equivalent of isset($var) 

if (myFunction() == true) -> equivalent of !empty($var) 
if (myFunction())   -> concise equivalent of !empty($var) 

if (myFunction() == false) -> equivalent of empty($var) 
if (!myFunction())   -> concise equivalent of empty($var) 

參考鏈接到isset -