konstruktory v modelu a obecně návrh

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
qteck
Člen | 164
+
0
-

Ahoj,

snažím se načíst obsah tabulky a to tím způsobem že jsem si vytvořil připojení v base repository.php a dědím ho ve třídě Article.

netbeans mi furt varuje ať použiju volání rodičovského konstruktoru.. od php 5 jsem četl že by se to mělo, ale chce to vložit aspoň jeden parametr.

jenže já tímto způsobem nic předávat nepotřebuju, chtěl jsem si jenom zavolat obsah tabulky v konstruktoru a pak vytvořit metody na volání konkrétního sloupce:

class Article extends BaseRepository
{
    protected $article;

    function __construct()
    {
        parent::__construct();

        $this->article = $this->conn->table(lcfirst(__CLASS__));
    }

    function getArticleById(){..... $this->article->where(1)}
}

teĎ se na to koukám a zdá se mi to trochu nechutné, ale stejně, pro pořádek aspoň, kdybych to tak chtěl udělat, bylo by to takto správně, nebo jakým způsobem by to mělo být?

je to spíše obecně php dotaz, tak sorry about that.

Díky

Oli
Člen | 1215
+
0
-

Ten konstruktor v BaseRepository předpokládám dostává proměnnou která nese Nette\Database\Context. A ty když zavoláš parent::__construct(); tak mu musíš tu proměnnou dát. Jinak ti to bude nadávat jak píšeš. Tzn předat si Context do té třídy Article nebo nevolat konstruktor předka a řešit to nějakým setrem.

qteck
Člen | 164
+
0
-

ou aha, ta k to jo, znamená to, že když žádnej novej kontruktor volat nebudu, tak to funguje pro mě tím tradičním způsobem, že se prostě podědí ten rodič sám?

jo a teď si si naťuknul setter.

četl jsem o setterech a getterech, že udájně je nette \ object dotahuje k dokonalosti (J. V.).

na php net jsem si přečetl:

__set() is run when writing data to inaccessible properties.

__get() is utilized for reading data from inaccessible properties

nikdy předtím jsem s tím nepracoval a tak nevím jak je mohu v nette využít a čemu vlastně slouží? a jak moc jsou v nette duelžití, obejdu se bez nich? Potřebuji je?

Díky.

Mesiah
Člen | 240
+
0
-

qteck napsal(a):

ou aha, ta k to jo, znamená to, že když žádnej novej kontruktor volat nebudu, tak to funguje pro mě tím tradičním způsobem, že se prostě podědí ten rodič sám?

Pokud to chápu správně, tak ano, nemusíš deklarovat kontruktor, pokud do něj nepotřebuješ přidat dodatečnou logiku.

jo a teď si si naťuknul setter.
četl jsem o setterech a getterech, že udájně je nette \ object dotahuje k dokonalosti (J. V.).

ano, Object je hodně vychytaný

na php net jsem si přečetl:
__set() is run when writing data to inaccessible properties.
__get() is utilized for reading data from inaccessible properties

nikdy předtím jsem s tím nepracoval a tak nevím jak je mohu v nette využít a čemu vlastně slouží? a jak moc jsou v nette duelžití, obejdu se bez nich? Potřebuji je?

__set() je zavolaný, když zapisuješ do nedeklarované property/slotu.
__get() je volaný, když čteš data z nedeklarované property/slotu.

to se hodí například, když nad třídou A zavoláš něco jako $a->teddy = „Brown“, kde

class A {
	public $toy;
}

jak vidíš, $teddy není deklarovaný, tak se zavolá magický setter, kde si můžeš přečíst jaká property je volaná a eventuálně s tím něco udělat. To je jedna z věcí, co dělá Object vychytaný.
Tohle ale není záležitost Nette, ale samotného PHP, takže je to spíše offtopic a doporučuju nastudovat OOP v PHP.

Díky.

Np.