PHP - 数组致命错误

时间:2013-03-21 11:48:15

标签: php arrays

我的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文档中的有效合法代码(example #1中的http://php.net/manual/en/language.variables.variable.php

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

由于

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

使用$this->$property[0][0]您将尝试访问$属性字符串的第0位的第0位导致错误的原因是因为您尝试访问char的第0位,这是不可能的,因为char s不能作为数组引用。

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