Page 1 sur 1
Résoudre l'erreur Illegal Offset Type ?
Posté : 04 janv. 2007, 12:24
par momox
Bonjour,
il arrive que des fois, plongés dans la POO, vous affectiez a un nom de clé dans un tableau un objet...
Malheureusement, votre print_r à beau vous dire que ca contient quelque chose, ca ne marchera pas du tout...
Et pour causer, dixit le site de nexen:
Il n'est pas possible d'utiliser des tableaux ou des objets comme clés. Ce faisant, vous généreriez une alerte : Illegal offset type .
Donc j'ai trouvé cette petite astuce qui vous évitera bien des désagréments :
$array[(string) $objet->var] = $objet->var2;
Et la, fini le Illegal Offset Type

Posté : 31 janv. 2008, 22:04
par petros
ca c'est deja mieux.
Pas besoin d'ecrire du code mort

! ca vous apprendra a ne pas avoir codé en C++ ou en JAVA avant

qui vous apprend ce qu'est le CAST.
Posté : 31 janv. 2008, 22:28
par momox
Je ne connaissais pas le transtypage a l'époque, et puis le premier langage que j'ai utilisé a été le php

Maintenant c'est vrai que j'utilise cette méthode

, je vais donc mettre à jour l'astuce.
Merci d'avoir fait remonter la chose petros

Posté : 31 janv. 2008, 22:44
par zeus
Il est vrai que le faible typage (qui a dit aucun typage ?

) de PHP n'est pas toujours un avantage

Posté : 31 janv. 2008, 23:30
par Hubert Roksor
Je crois que l'appelation politiquement correcte est "typage dynamique", et dans le cas présent je ne vois pas ça comme un défaut ou une limitation propre à PHP. Le manuel nous dit que les clés d'un tableau peuvent être des nombres ou des chaînes, on ne nous a pas promis la possibilité d'utiliser des objets, des booléens, voire... des ressources ?
Enfin, quitte à déterrer un sujet, j'aimerais ajouter que caster un objet en chaîne ne donnera pas toujours le résultat escompté, si vous voulez utiliser un identifiant unique pour un objet, regardez du côté de spl_object_hash() (PHP 5.2+)
Posté : 18 févr. 2008, 15:37
par Gofromiel
Je suis pas très convaincu... puisque les tableaux associatifs seront transtypés en "Array", la seule chose que tu vas obtenir avec ta "solution" c'est une perte de données. S'il est impossible d'utiliser les tableaux en tant que clé, c'est qu'il y a une bonne raison... À moins que ces tableaux soient en fait des objets pour lesquels tu as implémenté la fonction magique "__toString()"...
Posté : 18 févr. 2008, 21:03
par Arcanis
Je dit peut-être un truc con mais...pourquoi ne pas utiliser un simple var_export() avec le paramètre de retour pour tranformer objets/tableaux en chaines? Ca serait peut-être plus lent (clefs longues), mais plus sûr, comme le dit gofromiel (théoriquement, le contenu des objets/tableaux devrait être unique).
(Et personnellement, je ne voit pas dans quel cas on peut essayer de mettre un objet en clée de tableau...les clefs sont des identifiants, et les objets/tableaux de conteneurs de valeurs. Autant utiliser les clefs avec leur fonction première...)
Posté : 18 févr. 2008, 23:01
par momox
J'avais rencontré ce problème lors de l'utilisation de la classe simpleXml, j'ai voulu créer un tableau avec comme clé d'index une valeur, hors, $simplexml->monchamp retourne une classe de type simple_xml_element, ce qui m'a posé un problème, j'avais résolu le problème de la sorte

Posté : 19 févr. 2008, 19:18
par Gofromiel
Le mieux serait d'utiliser serialize() pour transformer tableaux et objets en chaines, mais toute cette idée d'utiliser des tableaux associatif en tant que clé me semble très mauvaise...
Posté : 19 févr. 2008, 19:32
par momox
Le mieux serait d'utiliser serialize() pour transformer tableaux et objets en chaines, mais toute cette idée d'utiliser des tableaux associatif en tant que clé me semble très mauvaise...
En fait, je voulais juste faire $array[$simple_xml_instance->var] = 'value'; et c'est là que ca bloquait et que j'ai du bidouiller

@+