De quelle façon mon index de tableau un "Illegal string offset'?
Lors de "l'épreuve de l'avenir" de code par les tests sur PHP 5.4, je reçois un avertissement que je ne comprends pas.
function __clone() {
$this->changed = TRUE;
foreach ($this->conditions as $key => $condition) {
if (
$condition['field']
instanceOf QueryConditionInterface) {
$this->conditions[$key]['field'] = clone($condition['field']);
}
}
}
J'ai éclaté $condition['field']
dans sa propre ligne afin de réduire la quantité de code à se concentrer sur. Sur la ligne, PHP a ceci à dire
Warning: Illegal string offset
'field'
dansDatabaseCondition->__clone()
Et je ne peux pas voir comment le 'champ', est un illegal string offset. Je suppose que je suis juste en manque de quelque chose d'évident, mais si la communauté ne peut pas trouver de problème, je vais faire un rapport de bogue.
- Je interpréter le message d'avertissement comme "n'est en aucun cas "terrain" d'une clé valide". Cette erreur aurait fait sens que si j'avais essayé de nous, par exemple un tableau comme une clé.
Pouvez-vous
var_dump('$this->conditions');
?Cette erreur se produit également lors de l'installation de Drupal sous PHP 5.4 drupal.org/node/1483986 je crois que quelque chose en PHP 5.4 est brisé, ou peut-être "champ" est désormais réservé PHP mot-clé qui ne peut pas être utilisé pour les tableaux, mais je penche vers un bogue de PHP. Il est rapporté que cette erreur ne se produit pas dans les versions antérieures à PHP.
Si vous lisez mon commentaire sous la accepté de répondre, vous verrez que ce n'est pas un problème PHP. Le problème a été résolu comme de Drupal 7.13 drupal.org/node/1414412
OriginalL'auteur Letharion | 2012-02-17
Vous devez vous connecter pour publier un commentaire.
L'avertissement a l'air de dire que
$condition
est une chaîne de caractères. Sans aucune connaissance du code, je ne suis pas si cela a un sens.OriginalL'auteur Winston Ewert
Sans plus de connaissances au sujet de la création du tableau de conditions/itérateur, je ne peux que supposer que vous devriez d'abord vérifier si le décalage qui existe.
À l'aide de la fonction isset dans cette situation est assez et plus rapide que array_key_exists, la seule différence est que si $condition['champ'] est NULL isset sera de retour falls, array_key_exists renvoie true, provoquer la clé existe. Mais parce que vous voulez travailler sur les champs qui sont une instance de QueryConditionInterface, vous fonctionne bien avec isset.
si $condition n'tableau ou un tableau d'objets de mise en œuvre, puis vous essayez d'accéder à chaîne et que vous ne pouvez pas accéder à la chaîne char tableau avec une chaîne en tant que clé et obtenir l'illegal string offset erreur, c'est nouveau pour moi de voir que l'erreur sur 5.4 surtout, je le vois sur la 6.0 branche...
La valeur de $condition peut être 'ET' par exemple.
OriginalL'auteur Tobias Herkula