Discussion:
Fatal error: Cannot use string offset as an array
(trop ancien pour répondre)
Toto
2008-12-10 22:14:42 UTC
Permalink
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.
Olivier Miakinen
2008-12-11 00:08:53 UTC
Permalink
Post by Toto
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
2008-12-11 16:30:22 UTC
Permalink
Post by Olivier Miakinen
Ce que j'en comprends, c'est que si tu as auparavant utilisé
$etab_informationpour y stocker une chaîne de caractères, alors
$etab_information = array();
$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
2008-12-11 17:01:15 UTC
Permalink
Post by Pascal PONCET
Post by Olivier Miakinen
Ce que j'en comprends, c'est que si tu as auparavant utilisé
$etab_informationpour y stocker une chaîne de caractères, alors
$etab_information = array();
$etab_information[...] = ...
Tiens, je ne savais pas, intéressant...
Cela dit, c'est assez logique puisqu'on peut capturer un caractère d'une
$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.
Post by Pascal PONCET
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
2008-12-11 18:07:16 UTC
Permalink
Post by Olivier Miakinen
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
2008-12-12 08:15:39 UTC
Permalink
Post by Pascal PONCET
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: <http://fr.wikipedia.org/wiki/Typage_fort>
--
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
Continuer la lecture sur narkive:
Loading...