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.

echo"<table><tr>";
  for($k=0;$k<=$i;$k++)
    {
      echo "<th>$k. oszlop</th>\n";
      ${"o".$k}=new Oszlop($i,$k);
      if($k!=$i) echo"<th>pontok</th><th>eredmény</th>";
    }
echo"</tr>";
$hatar=pow(2,$i);
for($sor=1;$sor<=$hatar;$sor++)
{
    echo"<tr>\n";
    //végigmegy az összes soron
    for($oszlop=0;$oszlop<=$i;$oszlop++)
    {
        ${"o".$oszlop}->oszlopKiir($string);
    }
    echo"\n</tr>\n";
}
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)

<?php

 class Oszlop {
   public $k;
   public $i;

   public function Oszlop($i, $k) {
     $this->k = $k;
     $this->i = $i;
   }

   public function oszlopKiir() {
     echo "o:".$this->k."\n";
   }
 }

 $i = 4;
 echo"<table><tr>";
   for($k=0;$k<=$i;$k++)
     {
       echo "<th>$k. oszlop</th>\n";
       ${"o".$k}=new Oszlop($i,$k);
       if($k!=$i) echo"<th>pontok</th><th>eredmény</th>";
     }
 echo"</tr>";
 $hatar=pow(2,$i);
 for($sor=1;$sor<=$hatar;$sor++)
 {
     echo"<tr>\n";
     //végigmegy az összes soron
     for($oszlop=0;$oszlop<=$i;$oszlop++)
     {
         echo "<td>";
         ${"o".$oszlop}->oszlopKiir($string);
         echo "</td>";
     }
     echo "\n</tr>\n";
 }
 echo "</table>";

?>
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 :] )