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 :

Résultat inattendu valeur de variable


Sujet :

Langage PHP

  1. #1
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 383
    Points : 367
    Points
    367
    Par défaut Résultat inattendu valeur de variable
    Bonsoir,
    je suis occupé de développer un petit site web pour le fun et j'ai eu un résultat inattendu à savoir la variable qui prenait une valeur dont je ne m'y attendais pas;

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $link = array(
        'content' => 'a',
        'children' => array(
            'content' => 'b'
        )
    );
     
    echo $link['content'];
    foreach ($link["children"] as $link) {
    	echo $link['content'];
    }
    echo $link['content'];
    //résultat obtenu abb
    Pourquoi est-ce que j'obtiens ces valeurs et non aba?
    le $link du foreach n'a-t-il pas une portée limité au foreach?
    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 255
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 255
    Points : 8 548
    Points
    8 548
    Billets dans le blog
    17
    Par défaut
    Dans ton foreach, le "as $link" écrase le $link d'origine

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    la réponse de séb. est logique. J'ai voulu tester pour apprendre, mais j'ai une fatal error. Pourquoi ?

    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
    <?php
    $link = array(
    'content' => 'a',
    'children' => array(
    'content' => 'b'
    )
    );
     
     
    echo $link['content'];
    foreach ($link['children'] as $link2) {
    echo $link2['content']; //Fatal error: Uncaught TypeError: Cannot access offset of type string on string in
    // C:\projets\dvp\divers\dvp1.php:12 Stack trace: #0 {main} thrown in C:\projets\dvp\divers\dvp1.php on line 12
    }
    echo $link['content'];
    //résultat obtenu abb

  4. #4
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    pour avoir aba,

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    echo $link['content'];
    foreach ($link['children'] as  $link2) {
        echo $link2;
    }
    echo $link['content'];

    Mais bon la boucle n'est pas nécessaire ici

    @laurentSc , foreach dans sa forme simple boucle sur les valeurs donc dans votre code vous essayez de faire 'b'['content']

  5. #5
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 383
    Points : 367
    Points
    367
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Dans ton foreach, le "as $link" écrase le $link d'origine
    Oui je m'en suis douté mais j'aurais pensé que le $link de ma boucle n'aurait eu qu'une portée à l'intérieur de ma boucle
    Comme dans les autres langages de haut niveau: java C# ruby & co
    Merci,
    bonne journée

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 255
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 255
    Points : 8 548
    Points
    8 548
    Billets dans le blog
    17
    Par défaut
    En PHP les blocs ne limitent pas la portée des variables.

    Si tu veux cloisonner tes variables il faut utiliser une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
     
    $link = array(
        'content' => 'a',
        'children' => array(
            'content' => 'b'
        )
    );
     
    echo $link['content'];
    array_walk($link['children'], function($link) { echo $link; });
    echo $link['content'];
    Résultat obtenu aba

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

Discussions similaires

  1. pthread et problème de valeur de variables globales
    Par arkerone dans le forum POSIX
    Réponses: 8
    Dernier message: 13/04/2011, 23h07
  2. Problème attribution valeur recordset variable
    Par bobosh dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/08/2008, 15h51
  3. Réponses: 2
    Dernier message: 11/02/2008, 22h02
  4. Réponses: 4
    Dernier message: 31/07/2007, 21h52
  5. [MySQL] problème avec la récupération des valeurs des variables POST
    Par Jasmine80 dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 11/05/2007, 16h08

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