Vytvoření Latte v komponentě nebo presenteru novou instancí

Klobás
Člen | 113
+
0
-

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
+
+1
-

nevidim duvod, proc by se melo pouzit 1., to druhe je rozhodne spravnejsi/lepsi

Klobás
Člen | 113
+
0
-

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
+
0
-

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
+
0
-

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)

:-)