ugrás a tartalomhoz

Ciklusban elmaradó függvényhívások

Szigyártó Mihály · 2009. Aug. 19. (Sze), 15.41
Sziasztok!
Van egy kódom, ami elvileg egy táblázatot ír ki úgy, hogy az osztály példányok az oszlopok, a sorokat pedig az oszlopKiir() írja ki. Egyébként egy egyenes kieséses rendszert jelenít meg, változó résztvevővel, rosszul.
  1. echo"<table><tr>";  
  2.   for($k=0;$k<=$i;$k++)  
  3.     {  
  4.       echo "<th>$k. oszlop</th>\n";  
  5.       ${"o".$k}=new Oszlop($i,$k);  
  6.       if($k!=$iecho"<th>pontok</th><th>eredmény</th>";  
  7.     }  
  8. echo"</tr>";  
  9. $hatar=pow(2,$i);  
  10. for($sor=1;$sor<=$hatar;$sor++)  
  11. {  
  12.     echo"<tr>\n";  
  13.     //végigmegy az összes soron  
  14.     for($oszlop=0;$oszlop<=$i;$oszlop++)  
  15.     {  
  16.         ${"o".$oszlop}->oszlopKiir($string);  
  17.     }  
  18.     echo"\n</tr>\n";  
  19. }  
  20. echo "</table>";  
Az oszlopKiir() függvénybe tettem egy kiírást a legelejére, ami megmutatja, hogy valamiért nem minden sorban hívódik meg a függvény. Valamiért minden 2. sorban elhagy valamennyi függvényhívást.

Egész pontosan ezt a kimenetet adja:

o: 0 | s: 1
o: 1 | s: 1
o: 2 | s: 1
o: 3 | s: 1
o: 0 | s: 2
o: 2 | s: 2
o: 3 | s: 2
o: 0 | s: 3
o: 1 | s: 3
o: 2 | s: 3
o: 3 | s: 3
o: 0 | s: 4
o: 3 | s: 4
o: 0 | s: 5
o: 1 | s: 5
o: 2 | s: 5
o: 3 | s: 5
o: 0 | s: 6
o: 0 | s: 7
o: 1 | s: 7
o: 2 | s: 7
o: 3 | s: 7
o: 0 | s: 8

(o oszlop, s sor, jelenlegi adatokkal ($i=3) mindegyikből 4-et kellene, hogy adjon).
Az $i változót is kiírattam, nem változik a futás során.
Ha valakinek van ötlete, hogy miért lehet, azt nagyon megköszönném.


Misi
 
1

Végrehajtás során hiba?

Szigyártó Mihály · 2009. Aug. 19. (Sze), 16.47
Annyit módosítottam a kódban, hogy kikommenteltem a függvény tényleges tartalmát, és így megfelelő eredményt adott ki. Lehetséges, hogy a végrehajtás során valahogy megelőzi egyik függvény a másikat, ezért már végre sem hajtódik a "másik"?
2

Lehet, hogy félreértettem valamit, de

zyron · 2009. Aug. 19. (Sze), 17.10
nekem az alábbi kód minden sorba generál 0,1,2,3,4-et. Próbáld ki, futtatható!
Annyi, hogy kiegészítettem egy Oszlop osztállyal a te kódodat. (illetve a belső for ciklusba tettem <td>-t meg </td>-t, hogy a táblázatba tegye bele a kiírásokat)
  1. <?php  
  2.   
  3.  class Oszlop {  
  4.    public $k;  
  5.    public $i;  
  6.   
  7.    public function Oszlop($i$k) {  
  8.      $this->k = $k;  
  9.      $this->i = $i;  
  10.    }  
  11.   
  12.    public function oszlopKiir() {  
  13.      echo "o:".$this->k."\n";  
  14.    }  
  15.  }  
  16.   
  17.  $i = 4;  
  18.  echo"<table><tr>";  
  19.    for($k=0;$k<=$i;$k++)  
  20.      {  
  21.        echo "<th>$k. oszlop</th>\n";  
  22.        ${"o".$k}=new Oszlop($i,$k);  
  23.        if($k!=$iecho"<th>pontok</th><th>eredmény</th>";  
  24.      }  
  25.  echo"</tr>";  
  26.  $hatar=pow(2,$i);  
  27.  for($sor=1;$sor<=$hatar;$sor++)  
  28.  {  
  29.      echo"<tr>\n";  
  30.      //végigmegy az összes soron  
  31.      for($oszlop=0;$oszlop<=$i;$oszlop++)  
  32.      {  
  33.          echo "<td>";  
  34.          ${"o".$oszlop}->oszlopKiir($string);  
  35.          echo "</td>";  
  36.      }  
  37.      echo "\n</tr>\n";  
  38.  }  
  39.  echo "</table>";  
  40.   
  41. ?>  
Mellesleg, hogyhogy nem vagy GTB-ban? :)
3

echo nélkül működik

Szigyártó Mihály · 2009. Aug. 19. (Sze), 19.06
Köszi, hogy megnézted.

Nem tudom miért, de a kiírással volt a baja. Ha az benne volt akkor egyszerűen mintha meg sem hívta volna a függvényeket. Nem tudom, hogy lehet-e valami köze a pufferelésnek hozzá, próbáltam flush();-t írni a ciklus belsejébe, utána tettem bele egy sleep(1)-et is, de attól sem lett jobb.

Végül az összes echo-t lecseréltem $buff.=-re és a két ciklus után kiírtam a tartalmát, így jó lett. Valakinek van valami ötlete, hogy mitől lehetett?

Ha esetleg van annyira érdekes, az egész kódot is feltehetem valahova :)

(Azt meg megírtam mailben, hogy miért nem ott vagyok :] )