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

PHP 陣列定義中不能直接使用 if 語句:正確寫法是三元運算符或預先構建

     編輯:PHP 綜合知識

錯誤代碼示例

<?php
$a = 1; $b = 2;
$t = array(
    array('a', 'string', $field['a']),
    if ($a == $b) { array('b', '1') }  // ❌ 語法錯誤:陣列定義中不能放語句
);
print_r($t);

報錯:Parse error: syntax error, unexpected 'if' (T_IF)。PHP 陣列字面量 array(...) / [...] 內部只能包含**表達式**,if 是語句,不可用。

正確寫法三種

1. 三元運算符 (最常用、單行)

$t = [
    ['a', 'string', $field['a']],
    $a == $b ? ['b', '1'] : ['b', '2']  // 表達式,返回陣列
];

2. 空值合併運算符 (PHP 7.0+,針對 null 判斷)

$cond = $a == $b ? ['b', '1'] : null;
$t = [
    ['a', 'string', $field['a']],
    $cond ?? ['b', '2']
];

3. 預先構建再合併 (邏輯複雜時推薦,可讀性最好)

$base = [
    ['a', 'string', $field['a']],
];

$extra = [];
if ($a == $b) {
    $extra[] = ['b', '1'];
} else {
    $extra[] = ['b', '2'];
}
// 甚至可以多條件
if ($someOtherCondition) {
    $extra[] = ['c', '3'];
}

$t = array_merge($base, $extra);

進階:條件性展開多個元素 (PHP 7.4+ 展開運算符)

$t = [
    ['a', 'string', $field['a']],
    ...($a == $b ? [['b', '1']] : [['b', '2']]), // 展開陣列元素
    ...($showC ? [['c', '3']] : []),
];

原文提到的「緩存未清理」誤導

作者說「開發代碼沒及時清理緩存。。。。悲劇就是從這裡開始」。實際上 **PHP 陣列定義語法錯誤屬於編譯期錯誤,與運行時緩存 (OPcache/模板緩存) 無關**。只要代碼修正並重新請求 (OPcache 會自動檢測文件修改時間失效),即可生效。別把語法錯誤甩鍋給緩存。

總結

  • 陣列字面量內**只能放表達式** (值、變量、函數調用、三元運算符、展開運算符、匿名函數調用等)。
  • 條件邏輯用 **三元運算符** 或 **預先構建變量再合併**。
  • 複雜條件構建陣列時,**預先構建法** 可讀性最強,易於調試和擴展。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved