In welcher Weise ist mein array-index ein 'Illegal string offset'?
Beim "future-proofing" - code testen, PHP 5.4, bekomme ich eine Warnung die ich nicht verstehe.
function __clone() {
$this->changed = TRUE;
foreach ($this->conditions as $key => $condition) {
if (
$condition['field']
instanceOf QueryConditionInterface) {
$this->conditions[$key]['field'] = clone($condition['field']);
}
}
}
Brach ich $condition['field']
in eine eigene Zeile zu reduzieren die Menge an code zu konzentrieren. Etwa, dass bestimmte Zeile, PHP hat das zu sagen
Warnung: Illegal string offset
'field'
imDatabaseCondition->__clone()
Und ich kann einfach nicht sehen, wie 'Feld', ist ein illegal string offset. Ich vermute, dass ich bin nur etwas fehlt, klar, aber wenn die community nicht finden können, ein problem, ich werde einen bug-report.
Interpretiere ich die Warnung als "Unter keinen Umständen ist "Feld" ein Gültiger Schlüssel". Dieser Fehler hätte Sinn gemacht, wenn ich versucht hatte, uns zum Beispiel ein array als Schlüssel.
- Code-Review für die Verbesserung der Arbeits-code. Bestimmte Fragen über die Bedeutung von Warnhinweisen off-topic gibt.
- Können Sie
var_dump('$this->conditions');
? - Dieser Fehler tritt auch bei der Installation von Drupal unter PHP 5.4 drupal.org/node/1483986 ich glaube, etwas in PHP 5.4 ist gebrochen, oder vielleicht 'Feld' ist jetzt ein reserviertes PHP-Schlüsselwort nicht verwendet werden kann für arrays, aber ich bin Neigung zu einem PHP-Fehler. Es wird berichtet, dass dieser Fehler tritt nicht in früheren Versionen auf PHP.
- Wenn Sie Lesen, mein Kommentar unter die akzeptierte Antwort, die Sie werden feststellen, dass dies nicht ein PHP-problem. Das problem wurde gelöst, wie von Drupal 7.13 drupal.org/node/1414412
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Warnung sieht aus wie seine zu sagen, dass
$condition
ist ein string. Ohne Kenntnis des Codes ich weiß nicht, ob das macht keinen Sinn.Ohne mehr wissen über die Schaffung der Bedingungen, array, iterator, kann ich nur annehmen, dass Sie sollten zunächst prüfen, ob die Aufrechnung besteht.
Mithilfe von isset in dieser situation ist genug, und schneller als array_key_exists, der einzige Unterschied ist, wenn $Bedingung['Feld'] ist NULL isset zurück fällt, array_key_exists, wird true zurückgegeben, Ursache der Schlüssel vorhanden ist. Aber weil Sie nur wollen, um die Arbeit auf den Feldern, die eine Instanz von QueryConditionInterface, Sie läuft gut mit isset.