Autor | Zpráva | ||
---|---|---|---|
jefitto44 Profil |
Začal som kapku robiť OOP a zaujíma ma prvá vec... aký je rozdiel medzi zápisom typu
daco::urobdaco(); a $daco->urobdaco(); ? Ďalej sa chcem spýtať, ako sa používa return... v classe si nakodim, čo chcem, aby mi daný objekt robil pri určitej metóde, to viem. Lenže ako použijem to return? Čo do neho vlastne môžem dávať? Aby som bol konkrétny, dajme tomu, že mám databázu hráčov a každý hráč má svoje body. V class.user.php si teda založím novú funkciu, či metódu (tieto pojmy ešte presne neovládam), napr. public function getBestPlayers($limit), pričom v premennej $limit príde počet hráčov, koľko má ukázať. Ďalej pokračujem mysql_query, čiže selectom, ktorý hráčov vyberie a zoradí podľa počtu bodov. NAsleduje cyklus fetchovania výsledkov z databázy (v NeOOP už nasledovalo v cykle echo s výpisom jednotlivých hodnôt). A teraz by malo asi nasledovať return... lenže... čo do neho? A výpis v kóde bude takto? <?= $user->getBestPlayers(10)?>, čo by znamenalo, že má vybrať 10 najlepších hráčov a zobraziť? Ibaže nefunguje mi to takto... Funguje mi to však ako <? user::getBestPlayers(10); ?> Prečo? |
||
Snipo Profil |
Neviem či to dobre vysvetlím pretože až tak OOP neovládam ale skúsim.
daco::urobdaco() - pri volaní takejto metódy nemusíš vytvárať objekt, teda tú metódu voláš hneď z triedy (musí byť tuším public static function) $daco->urobdaco() - $daco je objekt ktorý je potrebné vytvoriť a na neho sa aplikuje metóda Viac si naštuduj sám, dosť sa v tom strácaš. A k return. Je to návratová hodnota funkcie. function sucet($x, $y) { $vysledok = $x + $y; return $vysledok; } echo sucet(1,2); // Napíše 3 |
||
jefitto44 Profil |
#3 · Zasláno: 11. 9. 2014, 19:43:52
Dobre a ako by sa return mohlo použiť v mojom prípade?
echo '<table> <tr> <th>Hráč</th> <th>Body</th> </tr> '; $gbp=mysql_query("SELECT username, role, point FROM ".TABLE_PREFIX."user WHERE 1 ORDER BY point asc LIMIT ".$limit.""); while($gBP=mysql_fetch_assoc($gbp)) { echo '<tr><td>'.$gBP["username"].'</td><td>'.$gBP["point"].'</td></tr>'; } echo '</table>'; return ČO? |
||
pcmanik Profil |
jefitto44:
Celkom slušne je spracovaná priamo oficiálna dokumentácia, ak teda angličtina nieje problém. Potom dôležitým prvkom OOP je, že každá metóda je zodpovedná za jednu vec. Ak teda máš metodú na vybranie riadkov z DB, ďalšia metóda ti ich vypíše. Neviem čo si predstavuješ pod tým "fetchovaním". A v tvojom prípade už nemáš čo returnovať keďže si to už vypísal. Samotná trieda by mohla vyzerať nejak takto: class User { private function getBestPlayers($limit) { // vyberieme data z DB return $gpb; } public function renderBestPlayers($limit) { $players = $this->getBestPlayers($limit); // vypis dat } } A nepoužívaj už mysql, je to zastaralé rozhranie ktoré bude v niektorej z budúcich verzií zmazané. |
||
Destiny_1 Profil |
#5 · Zasláno: 11. 9. 2014, 19:51:07
daco::urobdaco(); statická metoda
daco::variable; statická proměnná pro lepší pochopení statické proměnné si vyzkoušej třeba tohle; <?php class test { static private $data1=0; private $data2=0; public function __construct() { self::$data1++; $this->data2++; echo self::$data1."<br>"; echo $this->data2."<br>"; } } new test(); new test(); new test(); ?> nic...metoda nemusí za každou cenu něco vracet. |
||
Tori Profil |
#6 · Zasláno: 11. 9. 2014, 20:04:46
Další důležitý princip OOP (kromě jediné zodpovědnosti) je i zapouzdření - víte, že tahle metoda najde zadaný počet nejlepších hráčů, ale okolní kód nepotřebuje vědět, jak přesně to dělá, jestli je načte z databáze, z cache, nebo si najde nějaký žebříček na netu. Stačí vědět, že od ní pokaždé dostanu pole, které buď bude prázdné, anebo bude obsahovat záznamy o jednotlivých hráčích (jako vnořená pole):
array( array('id' => 1, 'jmeno' => 'jméno hráče', 'klub' => 'název klubu'), array(... další hráči ) Výhody oproti původnímu stavu (načtení dat, vytvoření HTML a echo) jsou velké: - tím, že metoda nic nevypisuje, můžete data hráčů získávat na jakémkoli místě v kódu - vyhledání dat hráčů a zobrazení těchto dat budou vzájemně nezávislé funkčnosti, můžete upravovat každou z nich samostatně (kdybyste třeba přešel od zastaralých mysql_* funkcí na mysqli nebo objektové rozhraní PDO). |
||
jefitto44 Profil |
#7 · Zasláno: 11. 9. 2014, 20:32:04
pcmanik:
„A nepoužívaj už mysql“ mysqli môžem/mám? |
||
Kubo2 Profil |
#8 · Zasláno: 11. 9. 2014, 20:37:18
|
||
jefitto44 Profil |
#9 · Zasláno: 12. 9. 2014, 07:13:24
Snipo:
Funguje mi to aj s public nestatic function. A funguje mi už aj druhý spôsob. Zatiaľ Ďakujem za rady |
||
Časová prodleva: 10 let
|
0