Fatal error: Cannot use string offset as an array

Le
Toto
Bonjour
sur un de mes sites je suis en train de passer de PHP4 à PHP5
la ligne ci-dessous génère une erreur (en PHP5) que je ne comprends pas.
d'autant + que c'est le type de synthaxe que j'utilise déjà sur une autre
machine PHP5

$etab_information["zotyco_".($zotyco_liste[$i])."_lib"]= $row[0]['zoneli'];

J'ai regardé sur le www et je n'ai pas trouvé d'explications satisfaisantes.
Auriez-vous des pistes.
Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #18108581
Le 10/12/2008 23:14, Toto a écrit :

sur un de mes sites je suis en train de passer de PHP4 à PHP5
la ligne ci-dessous génère une erreur (en PHP5) que je ne comprends pas.
d'autant + que c'est le type de synthaxe que j'utilise déjà sur une autre
machine PHP5

$etab_information["zotyco_".($zotyco_liste[$i])."_lib"]= $row[0]['zoneli'];

J'ai regardé sur le www et je n'ai pas trouvé d'explications satisfaisantes.
Auriez-vous des pistes.



Ben je ne sais pas, mais moi en tapant le titre de ton article dans
Google et en regardant le premier résultat il me semble qu'il y a la
solution (d'autant que l'auteur de la question précise, après que la
réponse lui a été donnée, que ça marchait en PHP4 mais plus en PHP5).

http://www.developpez.net/forums/d491390/php/langage/fonctions/tableaux-fatal-error-cannot-use-string-offset-as-an-array/

Ce que j'en comprends, c'est que si tu as auparavant utilisé
$etab_informationpour y stocker une chaîne de caractères, alors
il faut d'abord en faire un tableau :
$etab_information = array();
... avant de l'utiliser comme un tableau :
$etab_information[...] = ...

Au fait, c'est confirmé par le deuxième résultat de Google (mais en
anglais) :
http://informationideas.com/news/2006/06/14/fatal-error-cannot-use-string-offset-as-an-array-in/
Pascal PONCET
Le #18114001
Olivier Miakinen a écrit :
Ce que j'en comprends, c'est que si tu as auparavant utilisé
$etab_informationpour y stocker une chaîne de caractères, alors
il faut d'abord en faire un tableau :
$etab_information = array();
... avant de l'utiliser comme un tableau :
$etab_information[...] = ...



Tiens, je ne savais pas, intéressant...

Cela dit, c'est assez logique puisqu'on peut capturer un caractère d'une
chaîne sous la forme d'un tableau indicé :

$myvar = "hello";
echo $myvar[1]; // donne "e"

Je comprends que PHP, bien que non typé, y perde un peu son latin si on
mélange tout.

Cordialement,
Pascal
Olivier Miakinen
Le #18114281
Le 11/12/2008 17:30, Pascal PONCET a écrit :

Ce que j'en comprends, c'est que si tu as auparavant utilisé
$etab_informationpour y stocker une chaîne de caractères, alors
il faut d'abord en faire un tableau :
$etab_information = array();
... avant de l'utiliser comme un tableau :
$etab_information[...] = ...



Tiens, je ne savais pas, intéressant...

Cela dit, c'est assez logique puisqu'on peut capturer un caractère d'une
chaîne sous la forme d'un tableau indicé :

$myvar = "hello";
echo $myvar[1]; // donne "e"



Oui.

Note qu'une autre possibilité, que j'avais envisagée initialement
puis annulée (d'où une espace manquante dans la deuxième ligne citée
ci-dessus, comme souvent quand on fait une modif à la hâte), ce serait
que le problème soit non pas dans $etab_information mais dans $row.

Je l'ai annulée parce que je ne vois pas comment ce code pourrait
marcher en PHP4 si $row ou $row[0] est une chaîne. Cela dit, en dehors
de ce contexte il faudrait peut-être regarder là aussi.

Je comprends que PHP, bien que non typé, y perde un peu son latin [...]


^^^^^^^^^^^^^^^^^

C'est justement parce que PHP n'est *pas* un langage non type. Il est
peut-être faiblement typé, si on veut nommer comme ça le fait qu'il
existe tant de transtypages implicites, mais il existe bien huit types
distincts dans PHP. Il est même un peu plus typé que le C quand on
compte que le type booléen est différent du type integer.

Cordialement,
--
Olivier Miakinen
Pascal PONCET
Le #18114831
Olivier Miakinen a écrit :
C'est justement parce que PHP n'est *pas* un langage non type. Il est
peut-être faiblement typé, si on veut nommer comme ça le fait qu'il
existe tant de transtypages implicites, mais il existe bien huit types
distincts dans PHP. Il est même un peu plus typé que le C quand on
compte que le type booléen est différent du type integer.



Gloups !
Je pensais qu'un langage dit "typé" exigeait une déclaration explicite
du type avant utilisation d'une variable.
Je me goure ?

Enfin, on pourra toujours dire que c'est un langage à typage faible non
explicite, mais c'est plus long ;-) !

@+,
Pascal
CrazyCat
Le #18118101
Pascal PONCET wrote:
Je pensais qu'un langage dit "typé" exigeait une déclaration explicite
du type avant utilisation d'une variable.
Je me goure ?



Oui :) php est un langage typé dynamiquement (le typage dépend de ce que
l'on fait de la variable) alors que l'Ada est un langage typé
statiquement (on impose le type de la variable).
Et certains langages, comme le C++, sont typés statiquement mais accepte
le typage dynamique.

Petit lien intéressant:
--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces webmasters : http://www.c-p-f.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr
Publicité
Poster une réponse
Anonyme