$ params是PHP 7.2中的保留字吗?

时间:2019-01-31 04:57:38

标签: 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)
        {
            $$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文档中找不到它。

谢谢

2 个答案:

答案 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);

here