IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[typage faible] Fatal error: [] operator not supported for strings [PHP 4]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut [typage faible] Fatal error: [] operator not supported for strings
    Bonjour,

    Un petit problème de typage qui m'a empêché de finir un test pratique d'examen de recrutement...

    J'aimerai bien comprendre après coup ^^

    J'ai une fonction que voici :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    	/**
    	 * Fonction de mise à jour d'uun tableau
    	 *
    	 * @param $array		Tableau passé en paramètre
    	 * @param $operation	La saisie utilisateur
    	 *
    	 * @return $newArray 		Le tableau mis à jour
    	**/
    	function majArray($array, $operation){
     
    		$newArray = array();
    		$newArray = $array;
    		$newArray[] = $operation;
     
    		// Debug
    		print_r($newArray);
     
    		return $newArray;
    	}

    Qui me retourne cette erreur
    Fatal error: [] operator not supported for strings
    Le fait étant que je souhaiterai mettre à jour un tableau à partir d'un autre, $operation étant une chaîne de type

    [operateur][espace]*[valeurNumérique]*

    en gros,
    +12
    - 25
    /4
    Sont des valeurs acceptées.


    $array reçu en paramètre contient des valeurs comme la liste de ma citation.
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  2. #2
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Pour précision, de base la fonction ne faisait qu'un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $array[] = $operation;
    puis me retournait le résultat...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (array)$array[] = $operation;
    ne fonctionne pas mieux
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  3. #3
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Je teste ceci et n'ai pas d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
        /**
         * Fonction de mise à jour d'uun tableau
         *
         * @param $array		Tableau passé en paramètre
         * @param $operation	La saisie utilisateur
         *
         * @return $newArray 		Le tableau mis à jour
        **/
        function majArray($array, $operation){
     
            newArray = array(); // Cette ligne ne sert à rien
            $newArray = $array; // On pourrait simplifier les choses
            $newArray[] = $operation;
     
            // Debug
            print_r($newArray);
     
            return $newArray;
        }
     
        $a = array( ) ;
        $a = majArray($a, '+ 3') ;
        $a = majArray($a, '/ 2') ;
        $a = majArray($a, '* 4') ;
    ?>
    Pourrais-tu fournir le script produisant le msg d'erreur ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 71
    Par défaut
    hello!

    moi je dis $array est simplement un string! et l operation [] sur un string marche pas!

    c'est pas parce que ca s'appel $array que s'en est un^^


    j'suis sure!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $newArray = array();
    $newArray = $array;// en gros la ligne d'avant sert a rien $newArray devient simplement exactement la meme variable que $array donc $newArray est un string
    $newArray[] = $operation;// [] sur un string ca fonctionne pas

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par lunarnet76 Voir le message
    moi je dis $array est simplement un string! et l operation [] sur un string marche pas!
    Ouaip, c'est sûrement ça

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 71
    Par défaut
    j'ai tester c'etait bien ca l'erreur ^^ si tu passe un string a la place d'un array pour la variable $array

  7. #7
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Je sais pourquoi ça ne marche pas mais je ne sais pas comment le résoudre

    Mais bon, qu'on ne dise pas qu'un String n'est pas un tableau xD

    C'est un tableau de caractères

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $array = "foobar";
     
    echo $array[0]; // retournes "f" sur le flux standard
    Et oui...
    le fait d'affecter $opération à $array supprime le typage en array() comme le montre mes exemples >.<
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Deallyra Voir le message
    Je sais pourquoi ça ne marche pas mais je ne sais pas comment le résoudre
    Et bien il ne faut pas utiliser une chaîne de caractères comme un tableau !

    Mais bon, qu'on ne dise pas qu'un String n'est pas un tableau xD
    Pas en PHP

    C'est un tableau de caractères
    Non, on ne fait pas du C là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $array = "foobar";
     
    echo $array[0]; // retournes "f" sur le flux standard
    Oui, comme indiqué dans la doc. Par contre [] (sans indice/clef entres les crochets) sert à empîler un élément à un tableau, pas à effectuer une quelconque manip' sur une chaîne.

    le fait d'affecter $opération à $array supprime le typage en array() comme le montre mes exemples >.<
    Grâce au typage faible de PHP tu écrases la tableau avec une chaîne, d'autres langages provoqueraient une erreur.

  9. #9
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Je teste ceci et n'ai pas d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
        /**
         * Fonction de mise à jour d'uun tableau
         *
         * @param $array		Tableau passé en paramètre
         * @param $operation	La saisie utilisateur
         *
         * @return $newArray 		Le tableau mis à jour
        **/
        function majArray($array, $operation){
     
            newArray = array(); // Cette ligne ne sert à rien
            $newArray = $array; // On pourrait simplifier les choses
            $newArray[] = $operation;
     
            // Debug
            print_r($newArray);
     
            return $newArray;
        }
     
        $a = array( ) ;
        $a = majArray($a, '+ 3') ;
        $a = majArray($a, '/ 2') ;
        $a = majArray($a, '* 4') ;
    ?>
    Pourrais-tu fournir le script produisant le msg d'erreur ?
    O.o

    Ce code devrait te retourner une erreur dans l'état.

    Tu as "newArray" au lieu de "$newArray" ce qui provoque un parse error

    Un exemple ?
    Le voici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    <?php
     
    	/**
    	 * Fonction de mise à jour d'un tableau
    	 *
    	 * @param $array		Tableau passé en paramètre
    	 * @param $operation	La saisie utilisateur
    	 *
    	 * @return $array 		Le tableau mis à jour
    	**/
    	function majArray($array, $operation){
    		// Ajout de la valeur saisie par l'utilisateur
    		(array)$array[] = $operation;
     
    		// Debug
    		print_r($array);
     
    		return $array;
    	}
     
    	// On met à jour le tableau pour affichage
    	$array = majArray(@$_GET['tableauOperation'], @$_GET['valeur']);
    ?>
     
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    	<head>
    		<title>
    			Test
    		</title>
    	</head>
    	<body>
    		<form method = "GET" action = "#" <!-- Début du formulaire -->
    			<input type = "text" name = "valeur" value="" />
    			<input type = "submit" value="Envoyer" />	
    			<input type = "hidden" name = "resultat" value = "<?php echo $resultat; ?>" />
    			<input type = "hidden" name = "tableauOperation" value = "<?php echo $array; ?>" />
    		</form> <!-- Fin du formulaire -->
    	</body>
    </html>
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fatal error : [] operator not supported for strings
    Par abdelkarim_1987 dans le forum Langage
    Réponses: 3
    Dernier message: 04/07/2013, 10h48
  2. Réponses: 3
    Dernier message: 17/11/2009, 12h59
  3. [Wamp] Fatal error: [] operator not supported for strings
    Par shubb83 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 30/08/2007, 16h30
  4. Réponses: 2
    Dernier message: 08/06/2006, 10h43
  5. Réponses: 4
    Dernier message: 22/04/2006, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo