Začátečníkův dotaz na způsob zápisu
- sb
- Člen | 2
Zdravím všechny. Při pokusu pobrat alespoň ty úplné základy Nette jsem velmi brzy narazil. V úvodním tutoriálu je krátce po začátku k vidění následující kód:
<?php
public function renderDefault()
{
$this->template->posts = $this->database->table('posts')
->order('created_at DESC')
->limit(5);
}
?>
Mohl by mi prosím někdo krok po kroku napsat, co tento kód provede?
Problém pro mě představuje, že nerozumím tomu vícenásobnému použití operátoru „->“ několikrát za sebou. Samozřejmě vím, na co se operátor v PHP používá, ale nerozumím tomu jeho vícenásobnému použití za sebou. Dále jsem si přečetl něco řetězení a kaskádování metod v PHP, ale to asi není právě tento případ.
Zajímá mě tedy, co v tomto konkrétním případě představují „template“, „posts“, „database“, „table“, atd. Tedy zda jde o instanční proměnnou, metodu, jakousi formu reference na parametr… jak říkám, mate mě tam to vícenásobné použití ->.
Pokud mi někdo napíšete nebo vysvětlí co je co, hodně mi tím pomůžete.
- Oli
- Člen | 1215
Jedná se o tak zvaný fluent zápis a je to vlstně strasně jednoduchý.
$this->database->table('posts');
Tohle ti vrátí celou tabulku posts
->order('created_at DESC')
Seřadí podle create_at podle abecedy od Z
->limit(5);
Ořízne na 5 záznamů.
Celej ten dotaz se provede jen jednou, takže to skládání můžeš provádět na víc místech a až ty data budou fakt potřeba, tak se to teprve vytáhne.
Pro víc informací ohledně databází se podivej do dokumentace
- sb
- Člen | 2
Díky oběma za reakce a za užitečné odkazy.
Nějak jsem přehlédl (asi už jsem ospalej :-) ), že pravá strana výrazu od table dále je ono řetězení metod.
V tuto chvíli tedy nerozumím už jen levé straně výrazu, resp. mě tam mate to dvojí použití operátoru „->“. Při samostudiu OOP v PHP (ano, dělám na tom již nějaký čas) jsem na toto zatím nikdy nenarazil, proto jsem se ptám zde.
A ještě jednou díky za ochotu.
EDIT: Korekce slovosledu a pravopisu.
Editoval sb (22. 4. 2014 23:51)
- David Matějka
- Moderator | 6445
je to stejne jako
$template = $this->template;
$template->posts = $this->database->....;
tedy, na tomto objektu ($this
) ziskej property
template
– ta vrati instanci (objekt) nejake tridy
(Nette\Templating\Template) a do property posts v tom objektu template prirad
hodnotu, ktera je napravo od rovna se
- Šaman
- Člen | 2659
Pokud šipkovým operátorem získáš objekt, můžeš nad ním dál provádět stejný zápis.
$book->author->address->street
Pokud street
bude už obyčejná textová property, tak už
s tím dál nic dělat nemohu, ale pokud by to byl objekt, mohu nad tím dál
třeba volat jeho metody a property, dejme
tomu ->showMap();