首頁
編程語言
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() 時,PHP 會拋出致命錯誤:

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

錯誤程式碼範例

<?php
// 錯誤:直接檢查 strlen() 回傳值
echo empty(strlen('test')); // 觸發致命錯誤

根本原因

根據 PHP 官方文件 明確規定:

empty() 僅檢查變數,檢查任何非變數的運算式都會導致解析錯誤。換句話說,empty(trim($name)) 這樣寫是無效的。

技術層面上,empty() 是語言結構而非函數,其運作機制要求參數必須是可寫入的變數槽(以便檢查是否已設定且非空),函數回傳值只是暫時值,無法滿足此需求。

解決方案

方法一:指派給變數再檢查(推薦)

<?php
$length = strlen('test');
echo empty($length); // 正確輸出:bool(false)

方法二:使用比較運算子替代

若僅需判斷「是否為空字串/零/假值」,可直接比較:

<?php
$str = 'test';

// 判斷字串長度是否為 0
if (strlen($str) === 0) { ... }

// 判斷函數回傳是否為假值(false, null, 0, '', [] 等)
$result = some_function();
if (!$result) { ... } // 等同於 empty() 的邏輯判斷

方法三:封裝為輔助函數(專案通用)

/**
 * 安全版 empty:接受任意運算式,回傳布林值
 * 相當於 !isset($var) || !$var
 */
function is_empty($value) {
    return empty($value); // 此處參數是變數 $value,合法
}

// 使用方式
if (is_empty(strlen('test'))) { ... }
if (is_empty(trim($input))) { ... }

延伸閱讀:empty() vs isset() vs is_null()

情境empty($var)isset($var)is_null($var)$var === null
未定義變數true(不報錯)false錯誤錯誤
nulltruefalsetruetrue
'' (空字串)truetruefalsefalse
0 (整數零)truetruefalsefalse
'0' (字串零)truetruefalsefalse
falsetruetruefalsefalse
[] (空陣列)truetruefalsefalse
資源/物件/非空值falsetruefalsefalse

最佳實踐建議

  1. 永遠不要 直接對函數/方法呼叫結果使用 empty()、isset()、unset() 等需變數參考的語言結構。
  2. 先將結果 指派給變數,再進行檢查,程式碼更清晰、可除錯。
  3. 表單驗證建議使用 filter_input() 或框架提供的驗證元件,而非手工 empty($_POST['key'])。
  4. PHP 7+ 可使用 null 合併運算子 ?? 簡化預設值處理:$val = $_GET['key'] ?? 'default';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved