$params在PHP7.2中是保留字吗?

$params在PHP7.2中是保留字吗?,php,parameters,reserved,Php,Parameters,Reserved,我刚做了一次迁移,有件事让我大吃一惊。我在一个类中有这个函数: function selectEnums($name,$table,$filed, $params = '') { $fieldName = $name. $this->name; if(is_array($params) && sizeof($params) > 0) { foreach($params as $var => $newValue)

我刚做了一次迁移,有件事让我大吃一惊。我在一个类中有这个函数:

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作为$v)

由于前面的调试,我100%确定
$res
是一个数组。现在,这里有一件棘手的事情:如果我将变量从
$params
更改为
$parames
,它就可以正常工作。最糟糕的是,这一行运行良好:
如果(is_array($params)&&sizeof($params)>0)
则在与
$params
无关的另一行抛出致命错误

所以它在改变,为什么???有什么想法吗?可能是一个php.ini配置?保留字?我还没有在PHP文档中找到它


谢谢

PHP中几乎所有保留字都不是以
$
符号开头的,而是没有前导符号的定义,也应该大写。e、 g

const MY_RESERVE_WORD = value;
或与

define(MY_RESERVE_WORD, value);
因此,没有这样的保留字
params
,您可以在

可能
$params
在您使用的任何
lib/framework
中定义为
constant


希望这能清楚地说明
PHP

中常量的概念。错误消息与$params无关,而与$res有关,您将其作为数组在该行传递给foreach。显然,getEnums返回的是字符串,或者至少不是数组

编辑:另外,如果这是为了将$params的元素导入到符号表中(即数组键变为变量名):

。。。可以更简单地写为:

extract($params);

据我所知,这并不意味着什么。为什么要在
if(is_array($params)
中检查数组,但假设
$params
$params['options']
中的数组?如果
$params
始终是数组,不要将其默认为字符串,而是在参数hanks中使用
$params=[]
。$params=[]非常好,谢谢你的提示。似乎是服务器上的一个小故障,因为今天它不工作,所以我将它改回$params并再次工作。不知道extract(),非常好!非常感谢。关于错误消息,getEnums返回了一个数组,我确信,因为我正在调试$res并将其打印为数组,这是令人困惑的部分。现在,服务器上似乎出现了一个小故障,因为今天它不再工作,所以我再次将变量从$parames更改为$params,并且工作正常。我猜服务器有一些问题HP有一个鲜为人知的语法功能,它将字符串类似于字符数组处理。例如:$str=“AEIOU”;echo$str{1};将打印E。我发现调试函数中可能发生了类似的情况。很高兴它对您起作用。另外,请确保了解extract()的可选标志参数。如果已存在具有相同名称的变量,则根据传递的标志,该变量的行为可能会有所不同。提取的变量可能会覆盖现有变量,也可能不会覆盖现有变量,可能根本无法设置,或者可能具有与预期不同的名称(前缀)。
foreach($params as $var => $newValue)
        {
            $$var = $newValue;
        }
extract($params);