初讀 PHP 官方手冊時,常見函數原型如 array explode(string $delimiter, string $string[, int $limit]),可選參數連同前置逗號包在方括號內,乍看之下逗號位置似乎不合直覺。本文釐清此語法設計意圖。
// 官方寫法 array explode ( string $delimiter , string $string [, int $limit ] ) // 而非 array explode ( string $delimiter , string $string , [int $limit ] )
, int $limit 表示「從這個逗號開始的所有參數」都是可選的。若有多個可選參數,只需最外層一組括號:func(string $a[, string $b[, int $c]]) 意為 $b 與 $c 皆可省略,但若提供 $c 必須先提供 $b。, [int $limit],逗號屬於必填參數部分,括號內只剩型別與變數名,無法表達「逗號也隨參數一起省略」的語意。function explode($delimiter, $string, $limit = null),呼叫時 explode(',', 'a,b') 省略第三參數,逗號自然也不寫。原型以 [, ...] 精確對應此呼叫形式。| 原型 | 合法呼叫 | 非法呼叫 |
|---|---|---|
func($a[, $b]) | func(1), func(1,2) | func(1, , 3) |
func($a[, $b[, $c]]) | func(1), func(1,2), func(1,2,3) | func(1,,3) |
方括號包含前置逗號,是為了精確表達「參數群整體可選」且「呼叫時逗號隨參數一同省略」的語意。理解此慣例後,閱讀手冊將更無障礙。