-1

我刚刚进行了一次迁移,有些事情让我感到惊讶。我在一个类中有这个函数:

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 文档上找到它。

谢谢

4

2 回答 2

0

几乎所有的保留字PHP都不以$符号开头,而是在没有前导符号的情况下定义,并且也应该大写。例如

const MY_RESERVE_WORD = value;

或与

define(MY_RESERVE_WORD, value);

所以没有这样的保留字,您可以在PHP Fiddleparams测试以下代码

$params = [1, 2, 2];

foreach($params as $var => $newValue)
{
    $$var = $newValue;
}

可能$params定义为您正在使用constant的任何一个。lib/framework

希望这可以清楚地说明PHP.

于 2019-01-31T05:21:26.673 回答
0

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

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

foreach($params as $var => $newValue)
        {
            $$var = $newValue;
        }

...它可以更简单地写成:

extract($params);

http://php.net/manual/en/function.extract.php

于 2019-01-31T05:57:06.673 回答