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 になります。

$property 文字列の 0 番目の場所にアクセスしようと$this->$property[0][0]すると、エラーが発生します。これは、 char の 0 番目の場所にアクセスしようとするためです。配列。

あなたが望むのは$this->{$propperty}[0][0]、$propperty という名前の変数の 0 位の 0 位にアクセスしようとするということです。

于 2013-03-21T12:08:26.973 に答える