[PHP] Global

Résolu
Kyuzo Messages postés 30 Date d'inscription   Statut Membre Dernière intervention   -  
Reivax962 Messages postés 3742 Statut Membre -
Bonjour,

Ce script ne fonctionne pas, pouvez-vous me dire pourquoi?

<?php 
function test(){ 
require_once "./class.php"; 
$didelim = array(); 
$display=apply(); 
return $display; 
} 

echo test(); 
?>


class.php
<?php 
function apply() { 
global $didelim; 
for ($r = 1; $r < 10; $r++) 
for ($c = 1; $c < 10; $c++) { 
if (in_array("($r, $c)", $didelim)) continue; array_push($didelim, "($r, $c)"); 
} 
return $didelim; 
} 
?>


Merci d'avance

5 réponses

  1. le père
     
    Re

    Après essai...

    Tu as bien déclaré global $didelim; dans apply() mais tu as oublié de la faire dans test() !
    1
    1. Kyuzo Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
       
      Si
      $didelim = array();
      0
    2. le père
       
      j'ai écrit GLOBAL $didelim;
      Ça tu ne l'as pas fait dans test()
      0
    3. Kyuzo Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
       
      $didelim est crée dans test() elle n'existe pas hors de test()
      0
    4. le père
       
      Justement, c'est ça ton problème ! Telle que tu la déclares, elles est locale à test et n'est pas utilisable dans apply()
      Par contre, si tu mets global $didelim; dans test, elle devient globale.
      La déclarer hors de toute fonction comme le suggère Reivax962 devrait marcher aussi, mais le global $didelim; dans test que je te suggère depuis le début fonctionne.
      0
    5. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      D'accord avec le père, même si je préfère qu'elle soit déclarée proprement plutôt que par le truchement de global, d'autant qu'elle n'est même pas utilisée dans test().
      Allez, +1 pour cette solution ^^
      0
  2. thevinou Messages postés 1130 Statut Membre 190
     
    Le require dans une fonction, c'est limite, met le avant, ça ne coute rien
    0
    1. Kyuzo Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
       
      Ça change rien
      0
  3. ratikuss Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   262
     
    Il manque une { après ta première boucle for
    0
    1. Kyuzo Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
       
      C'est pas le problème
      Lance le script pour voir l'erreur
      0
  4. le père
     
    Bonjour,

    Tu dis que ça ne fonctionne pas... Que voulais tu obtenir et qu'obtiens-tu ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

    Il me semble que tu devrais déclarer $didelim en dehors de toute fonction avant de pouvoir l'utiliser en GLOBAL dans des fonctions.

    Je te suggère ceci :
    <?php 
    $didelim = array(); 
    require_once "./class.php"; 
    
    function test(){ 
    $display=apply(); 
    return $display; 
    } 
    
    echo test(); 
    ?>
    
    
    
    class.php
    
    <?php 
    function apply() { 
    global $didelim; 
    for ($r = 1; $r < 10; $r++) 
    for ($c = 1; $c < 10; $c++) { 
    if (in_array("($r, $c)", $didelim)) continue; array_push($didelim, "($r, $c)"); 
    } 
    return $didelim; 
    } 
    ?>
    0
    1. Kyuzo Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
       
      Oui c'est ça merci
      0
    2. le père
       
      Il me semble que tu devrais déclarer $didelim en dehors de toute fonction avant de pouvoir l'utiliser en GLOBAL dans des fonctions.
      C'est inutile
      Mais si on utilise une variable dans une fonction sans mettre global, comme Kyuzo le fait avec $didelim; dans test(), la variable n'est pas globale, tout simplement. Il suffit de mettre global dans toutes les fonctions où on l'utilise, même si elle n'est pas définie en dehors de ces fonctions.
      0