我刚刚进行了迁移,这让我感到惊讶。我在一个类中有此功能:
function selectEnums($name,$table,$filed, $params = '')
{
$fieldName = $name. $this->name;
if(is_array($params) && sizeof($params) > 0)
{
foreach($params as $var => $newValue)
{
$$var = $newValue;
}
}
$res = $this->getEnums($table,$field, $this->db);
$this->debug('res after getEnums');
$this->debug($res);
$params['options'] = array();
foreach($res as $v)
{
$params['options'][] = $v;
}
.....
}
现在,我得到:
PHP致命错误:未捕获的错误:无法将字符串偏移量用作数组 在....
在此行:foreach($res as $v)
由于之前的调试,我100%确信$res
是一个数组。现在,这是一件棘手的事情:如果将变量从$params
更改为$parames
,它就可以正常工作。更糟糕的是,此行工作正常:if(is_array($params) && sizeof($params) > 0)
,并且致命错误被抛出与$params
无关的另一行。
因此,它正在处理这种更改,请买为什么???有任何想法吗?也许是php.ini配置?保留字?我在PHP文档中找不到它。
谢谢
答案 0 :(得分:0)
classX1.valA is invalid.
classX1.valA: undefined
classX1.valA is valid.
classX1.valA: v1
classX2.valA: v2
中几乎所有保留的单词都不以PHP
开头,而是在定义时没有前导符号,并且也应大写。例如
$
或搭配
const MY_RESERVE_WORD = value;
因此,没有保留字define(MY_RESERVE_WORD, value);
,因为您可以在PHP Fiddle上测试以下代码
params
可能在您使用的任何$params = [1, 2, 2];
foreach($params as $var => $newValue)
{
$$var = $newValue;
}
中将$params
定义为constant
。
希望这可以使lib/framework
中的常量概念更清晰。
答案 1 :(得分:0)
错误消息与$ params无关,与与$ res无关,您将它们作为数组传递给该行的foreach。显然,getEnums返回的是字符串,或者至少不是数组。
编辑:此外,如果这是为了将$ params的元素导入到符号表中(即,使数组键成为变量名):
foreach($params as $var => $newValue)
{
$$var = $newValue;
}
...它可以写成更简单:
extract($params);