[PHP] Global

Résolu
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. Re

    Après essai...

    Tu as bien déclaré global $didelim; dans apply() mais tu as oublié de la faire dans test() !
    1
    1. Si
      $didelim = array();
      0
    2. j'ai écrit GLOBAL $didelim;
      Ça tu ne l'as pas fait dans test()
      0
    3. $didelim est crée dans test() elle n'existe pas hors de test()
      0
    4. 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. 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. Le require dans une fonction, c'est limite, met le avant, ça ne coute rien
    0
    1. Ça change rien
      0
  3. Il manque une { après ta première boucle for
    0
    1. C'est pas le problème
      Lance le script pour voir l'erreur
      0
  4. Bonjour,

    Tu dis que ça ne fonctionne pas... Que voulais tu obtenir et qu'obtiens-tu ?
    0
    1. 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. Oui c'est ça merci
        0
      2. 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