[27-Aug-2011 22:26:12] PHP Warning: Cannot use a scalar value as an array in /www/hx/enjoy.php on line 14
$arr_hx = $mem->get('hx'); // 假设返回 false (未命中)
if (!$arr_hx) {
$arr_hx['a'] = 'b'; // ❌ 此处报错:$arr_hx 是 bool(false),非数组
$mem->set('hx', $arr_hx);
}
PHP 变量一旦被赋值为标量类型(integer、float、string、bool、resource),不能直接当作数组使用(即不能用 `[]` 或 `['key']` 语法)。即使该变量之前是数组,被覆盖为标量后也会失去数组特性。
$mem->get() 未命中返回 false(布尔标量)if (!$arr_hx) 判断为真进入分支$arr_hx['a'] = 'b' 尝试以数组方式写入 → 触发 Warning$arr_hx = $mem->get('hx');
// 显式初始化为数组
if (!$arr_hx) {
$arr_hx = []; // 或 array()
$arr_hx['a'] = 'b';
$mem->set('hx', $arr_hx);
}
或更简洁的合并写法:
$arr_hx = (array) $mem->get('hx') + ['a' => 'b']; // 强制转数组再合并
$mem->set('hx', $arr_hx);
PHP 手册说明:标量类型可相互转换(int↔float↔string↔object),但标量不可转为数组。即使变量曾是一维数组,也不能直接转为多维数组(需显式重建)。
$data = (array) $mem->get('key');$arr = $mem->get('key') ?? [];