0

我的 PHP 代码中有一个关于动态数组的奇怪错误。

输出的错误是:

Fatal error: Cannot use string offset as an array ... on line 89

这是我的代码的一部分,它在一个 foreach 循环中,该循环遍历数据库中的设置:

foreach($query->fetchAll() as $row)
{
    if($site!=CURRENT_SITE_TEMPLATE)
    {
        $property = 'foreignSettings';
        $propertyType = 'foreignSettingsTypes';
    } else {
        $property = 'settings';
        $propertyType = 'settingTypes';
    }

    $this->$property[$row['variable_section']][$row['variable_name']] = $row['variable_value'];
    settype($this->$property[$row['variable_section']][$row['variable_name']],$row['variable_type']);

    $this->$propertyType[$row['variable_section']][$row['variable_name']] = $row['variable_type'];
}

为了示例代码,$site是'admin'并且CURRENT_SITE_TEMPLATE是'admin'。另外,$foreignSettings, $foreignSettingsTypes, $settings, and $settingTypes都定义为类范围内的数组

错误在第 89 行,即:

$this->$property[$row['variable_section']][$row['variable_name']] = $row['variable_value'];

我最初认为这是因为 $property 变量访问了数组,但是,这看起来像是 PHP 文档中的有效合法代码(http://php.net/manual/en/language.variables.variable.php in example #1

对此错误的任何帮助将不胜感激。

谢谢

4

2 回答 2

1

在您给定的示例$property中是一个字符串。然后,您尝试将其用作数组。字符串只有数字索引(如果您需要用作数组)。

于 2013-03-21T12:05:07.547 回答
0

问题如下:$this->$property[0]意味着您访问 $property 的第 0 个位置,在您的情况下,这将是字符串 $property 的第一个字母。因此你最终会得到 $this->f 或 $this->s。

$this->$property[0][0]您一起尝试访问 $property 字符串的第 0 位的第 0 位会导致错误,因为您尝试访问 char 的第 0 位这是不可能的,因为 char 不能被引用为大批。

您想要的是$this->{$propperty}[0][0]什么意味着您尝试访问名称为 $propperty 的变量的第 0 位的第 0 位。

于 2013-03-21T12:08:26.973 回答