int count(mixed $array_or_countable [, int $mode = COUNT_NORMAL])
COUNT_NORMAL (0):默認,只計一維元素COUNT_RECURSIVE (1):遞歸計算多維數組總元素數$a1 = [1,2,3,4,5]; count($a1); // 5
$a2 = ['a','b',['c','d'],'e']; count($a2); // 4
count($a2, 1); // 6 (遞歸)
$str = 'hello'; count($str); // 1
$num = 1; count($num); // 1
// 普通對象
class User { private $name; private $addr; }
$user = new User(); count($user); // 1
count((array)$user); // 2 (轉數組後計屬性)
// ArrayObject 子類
class UserAO extends ArrayObject {
public function count() { return 2; }
}
$userAO = new UserAO(); count($userAO); // 2 (調用自定義 count)
// Countable 接口
class UserC implements Countable {
public function count() { return 3; }
}
$userC = new UserC(); count($userC); // 3
php_count_recursive
E_WARNING 防無限遞歸mode=1 遞歸進入子數組handler->count_elements (ArrayObject 行為) → 調用並返回結果Countable → 調用 count() 方法| 機制 | 觸發條件 | 返回值來源 |
|---|---|---|
| count_elements | 繼承 ArrayObject 且未重寫 count() | 父類 ArrayObject::count() (默認 0) |
| Countable | implements Countable | 自定義 count() 方法返回值 |
count((array)$obj) 計屬性數$len = count($arr)count() 核心邏輯:數組→遞歸計數(含循環檢測);對象→count_elements/Countable/默認1;標量→1。理解 ArrayObject 與 Countable 的不同行為,正確選擇實現方式。性能敏感場景避免在循環條件重複調用。