Vytvoření Latte v komponentě nebo presenteru novou instancí
- Klobás
- Člen | 113
Ahoj,
když např. odesílám mail na šablonu použiji novou instanci Latte. (To
je celkem běžná věc).
Viděl jsem dvojí použítí
<?php
1) $template = parent::createTemplate();
$template->var = ...;
$template->setFile(...);
2) $template = $this->createTemplate();
... to samé
?>
Když překrývám rodičovskou metodu tak je jasné, že použiji parent:: když tedy chci zachovat to co se v ní má vykonat.
Nicméně, tady se vytváří nová instance, a proto mi není jasné, že
někdo použije 1 a jiný zase 2.
Co je správně?
- David Matějka
- Moderator | 6445
nevidim duvod, proc by se melo pouzit 1., to druhe je rozhodne spravnejsi/lepsi
- Klobás
- Člen | 113
Aha takže když máme základní model (viz podstatné torzo)
<?php
class BaseModel extends Nette\Object {
/** @var Nette\Database\Context */
public $database;
/** @var string */
protected $tableName;
/**
* @param Nette\Database\Connection $db
* @throws \Nette\InvalidStateException
*/
public function __construct(\Nette\Database\Context $db)
{
$this->database = $db;
}
protected function getTable()
{
return $this->database->table($this->tableName);
}
/**
* Vrací všechny záznamy z databáze
* @return \Nette\Database\Table\Selection
*/
public function findAll() {
return $this->getTable();
}
.
.
.
?>
A kolega si udělá něco jako
<?php
class ProductModel extends BaseModel
{
public function getProducts()
{
return parent::findAll(); // pro zjednodusseni ...
}
}
?>
tak je to proste blbost i když funguje, mělo by se volat $this->findAll();
- CZechBoY
- Člen | 3608
jo, určitě vždycky volej this, ikdyž je to až v předkovi… kdybys totiž potom chtěl „u sebe“/ve stejné třídě překrýt rodičovskou metodu tak by se ti furt volala metoda předka (parent::)
parent::xxx
volám jen v metodě xxx
, kterou
překrývám
Editoval CZechBoY (11. 3. 2018 14:16)
- Klobás
- Člen | 113
CZechBoY napsal(a):
jo, určitě vždycky volej this, ikdyž je to až v předkovi… kdybys totiž potom chtěl „u sebe“/ve stejné třídě překrýt rodičovskou metodu tak by se ti furt volala metoda předka (parent::)
parent::
xxx
volám jen v metoděxxx
, kterou překrývám
Jasně, já to chápu u překryvu metod, ale když se dělá nová instance nebo se volá něco co nebudu překrývat (tj instance Latte nebo ten poslední příklad s voláním findAll(), tak mi proste přijde, že parent:: je totální blbost a chtěl jsem si to ověřit a kdyby mě kolega poslal do háje, tak mu hodím link sem do topicu)
:-)