我的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)
对此错误的任何帮助都将不胜感激。
由于
答案 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位。