首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP empty()「Can't use function return value in write context」錯誤解析與正確用法

     編輯:PHP 相關知識

呼叫 empty(trim($str)) 直接拋出 Fatal error: Can't use function return value in write context。這不是 Bug,而是 PHP 語言設計限制:empty() 只接受變數,不接受運算式/函式回傳值。

錯誤示範

<?php
$str = "   ";
if (empty(trim($str))) { // Fatal error
    echo "empty";
}

根本原因

empty() 內部實作需取得變數的符號表引用(以檢查是否設定、是否為 null/false/0/空字串/空陣列),函式回傳值是暫時值,無符號表項目,無法傳址。

官方文件定義:bool empty ( mixed $var ) — 參數必須是變數。

正確寫法

方法一:先指派給變數(推薦,語意清晰)

<?php
$str = "   ";
$trimmed = trim($str);
if (empty($trimmed)) {
    echo "empty";
}

方法二:直接判斷邏輯值(效能較好)

<?php
$str = "   ";
if (trim($str) === '') { // 或 === false, === null, === 0 視需求
    echo "empty";
}

方法三:自訂包裝函式(支援運算式)

<?php
function is_empty($value) {
    return empty($value);
}

// 現在可以傳運算式
if (is_empty(trim($str))) {
    echo "empty";
}

同類受限函式對照表

函式是否接受運算式正確用法
empty()否empty($var)
isset()否isset($var)
unset()否unset($var)
array_pop()需變數參考array_pop($arr)
array_shift()需變數參考array_shift($arr)
reset()需變數參考reset($arr)
end()需變數參考end($arr)
next()/prev()/current()需變數參考next($arr)

PHP 版本演進說明

  • PHP 5.5+:empty() 支援任意運算式(如 empty($obj->getName())),但 PHP 5.4 及舊版仍報錯。
  • 若專案需相容 PHP 5.4/5.5 以下,請務必用變數中介。

實務建議

  1. 習慣先指派變數:$v = trim($str); if (empty($v)) — 除錯時可直接 var_dump($v)。
  2. 優先用嚴格比較:=== ''、=== null、=== false — 語意明確,效能最佳。
  3. 避免在模板/視圖層直接用 empty(函式()) — 控制器預處理好再傳給視圖。
記住:empty() 本質是「檢查變數是否存在且為空值」,不是「檢查值是否為空」。這語意差異正是它只接受變數的原因。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved