2012-02-17 6 views
7

PHP 5.4でテストして "未来校正"コードを使用すると、わかりませんが警告が表示されます。私の配列インデックスはどのように '不正な文字列オフセット'ですか?

function __clone() { 
    $this->changed = TRUE; 
    foreach ($this->conditions as $key => $condition) { 
    if (
    $condition['field'] 
    instanceOf QueryConditionInterface) { 
     $this->conditions[$key]['field'] = clone($condition['field']); 
    } 
    } 
} 

私が集中するコードの量を削減するために、独自の行に$condition['field']を勃発。不正な文字列DatabaseCondition->__clone()

'field'オフセットそして私はちょうど「フィールドが」、オフセット違法文字列がどのように見ることができない。その特定の行について、PHPはこれが

警告を述べています。私はちょっとしたことが分からないと思っていますが、コミュニティが問題を見つけることができない場合は、バグレポートを提出します。

私はこの警告を「」と解釈しますが、「フィールドは有効なキー」と解釈されません。このエラーは、例えば私たちがキーとして配列を試してみたら意味をなさないでしょう。

+0

コードレビューは作業コードを改善するためのものです。警告の意味についての具体的な質問は、そこで話題になっていません。 –

+1

あなたは 'var_dump( '$ this-> conditions');'できますか? –

+0

このエラーは、PHP 5.4でDrupalをインストールしているときにも発生します。http://drupal.org/node/1483986 PHP 5.4で何かが壊れていると思われます。または、おそらく 'field'は予約済みのPHPキーワードで配列には使用できません。私はPHPのバグに傾いています。このエラーはPHPの以前のバージョンでは発生しないことが報告されています。 – Brain2000

答えて

2

警告は、$conditionが文字列であると言っているようです。コードを知らなくても、それは意味をなさないかどうかはわかりません。

+0

Bah、そうです。上の "Mike Purcell"が示唆しているように、私はエラーが発生したときに条件をvar_dump $し、時には文字列になるようです。 – Letharion

3

条件配列/イテレータの作成についての知識がなければ、最初にオフセットが存在するかどうかを確認する必要があると思います。このような状況でISSETを使用して

if(isset($condition['field']) && $condition['field'] instanceOf QueryConditionInterface) 

が十分とarray_key_existsよりも高速である、唯一の違いは、もし$条件[「フィールドが」] NULL ISSETは、キーが存在する原因となり、array_key_existsはtrueを返します、滝を返しますされています。しかし、QueryConditionInterfaceのインスタンスであるフィールドだけで作業したいので、あなたはissetでうまく動作します。

+0

これはおそらく私の方が遅いですが、どのように当てはまるのでしょうか?これが既存の「フィールド」についての通知であった場合は、問題のバックトレースと問題の原因の特定に問題はありませんでした。しかし、今、私がエラーを読んでいるところでは、「フィールド」は有効なキーではありません。それは私にとって意味をなさない。これを質問にも追加しました。 – Letharion

+0

$ conditionが配列または配列オブジェクトの実装でない場合は、文字列にアクセスしようとしていて、文字列をキーとして文字列配列にアクセスできず、不正な文字列オフセットエラーが発生します。 5.4ではほとんど6.0のブランチにあります。 –

+0

$ conditionの値は、例えば 'AND'でもかまいません。 – olleolleolle

関連する問題