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::
xxxvolá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)
:-)