Nette::Object

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

mám návrh na vylepšení Nette::Object – co takhle přidat metodu toString? Podobně jako má java?

můj první pokus v tomto směru: (je uveden jen nový kód)

<?php

abstract class Object
{
	/* ... */

	/** @var integer (uniq id of current object)
	 *
 	 * @author 	Tomáš Jukin <jukin@webend.cz>
 	 * @copyright 	Copyright (c) 2006, 2009 Webend	 *
	 */
	private static $iID;

	/**
	 * When new Object is created, iID is incremented
	 */
	function __construct() {
		if(empty(SELF::$iID)) {
			SELF::$iID = 0;
		}
		else SELF::$iID++;
	}

	/* ... */

	/**
	 * Returns textual representation of this object
	 *
 	 * @author 	Tomáš Jukin <jukin@webend.cz>
 	 * @copyright 	Copyright (c) 2006, 2009 Webend
	 *
	 * @return string
	 */
	public function toString() {
		if(empty(Object::$iID)) throw new NotImplementedException(
			"If you want use Object's toString() method,
		     you have to use Object's constructor as well!"
			);
		return $this->getClass().'-'.Object::$iID;
	}

}

?>

Co na to říkáte? Ona stejně hlavní síla toString() metody tkví v jejím překrývání…

Napadá někoho jak to ošéfovat tak aby nebylo nutné volat explicitně konstruktor?

A ještě by se to možná mohlo poladit tak, aby bylo samostatné ID pro každou třídu. Dalo by se potom pomocí toho navíc poznat, kolik objektů už existuje od jaké třídy…

Honza Marek
Člen | 1664
+
0
-

K čemu to potřebuješ? Defaultní toString je podle mě v Javě vcelku na prd.

A pokud potřebuješ počítat objekty třídy, tak bych to dělal asi takto:

class Trida {
	public static $counter = 0;
	public function __construct() {
		$counter++;
	}
}

Editoval Honza M. (11. 2. 2009 21:02)

Inza
Člen | 330
+
0
-

Já nevím, jako pravdou je, že i v té Javě se to používá hlavně překryté, ale tak jsem si říkal, když už máme Object, tak proč ho nemít úplný, že? – Navíc šikovné IDE, ti to zobrazuje a začátečníkům třeba snáze dojde že by to mohli překrýt…

pmg
Člen | 372
+
0
-
/** @var integer (uniq id of current object)
 *
 * @author      Tomáš Jukin <jukin@webend.cz>
 * @copyright   Copyright (c) 2006, 2009 Webend  *
 */
private static $iID;

To mě pobavilo. Nechtěl bys k té deklaraci rovnou přibalit i licenci?

Jedinečný identifikátor objektu vrací funkce spl_object_hash a komponenty mají pro podobný účel pěknou metodu lookupPath.

Jan Tvrdík
Nette guru | 2595
+
0
-

Za sebe hlasuji ne pro tuto dle mého názoru blbost.

kravčo
Člen | 721
+
0
-

Inza napsal(a):

Co na to říkáte? Ona stejně hlavní síla toString() metody tkví v jejím překrývání…

Triedy frameworku, ktoré sa vedia konvertovať na string na to používajú vcelku úspešne magickú metódu PHP menom __toString(). Používajú ju len tie, ktoré ju potrebujú a vzhľadom na minimum spoločných vlastností by ju bolo zbytočné implentovať pre všetky, keď by sa aj tak neskôr prekryla.

A ještě by se to možná mohlo poladit tak, aby bylo samostatné ID pro každou třídu. Dalo by se potom pomocí toho navíc poznat, kolik objektů už existuje od jaké třídy…

Máš nejaký príklad z praxe, kedy potrebuješ rátať inštancie všemožných objektov, nie len nejakej veľmi obmedzenej skupiny?

Inza
Člen | 330
+
0
-

pmg napsal(a):

/** @var integer (uniq id of current object)
 *
 * @author      Tomáš Jukin <jukin@webend.cz>
 * @copyright   Copyright (c) 2006, 2009 Webend  *
 */
private static $iID;

To mě pobavilo. Nechtěl bys k té deklaraci rovnou přibalit i licenci?

Jedinečný identifikátor objektu vrací funkce spl_object_hash a komponenty mají pro podobný účel pěknou metodu lookupPath.

Legrace musí být, ne?;-) – Berme věci vážně, ale s humorem…;-)

Inza
Člen | 330
+
0
-

kravco napsal(a):

Inza napsal(a):

Co na to říkáte? Ona stejně hlavní síla toString() metody tkví v jejím překrývání…

Triedy frameworku, ktoré sa vedia konvertovať na string na to používajú vcelku úspešne magickú metódu PHP menom __toString(). Používajú ju len tie, ktoré ju potrebujú a vzhľadom na minimum spoločných vlastností by ju bolo zbytočné implentovať pre všetky, keď by sa aj tak neskôr prekryla.

A ještě by se to možná mohlo poladit tak, aby bylo samostatné ID pro každou třídu. Dalo by se potom pomocí toho navíc poznat, kolik objektů už existuje od jaké třídy…

Máš nejaký príklad z praxe, kedy potrebuješ rátať inštancie všemožných objektov, nie len nejakej veľmi obmedzenej skupiny?

To nemám, s tím souhlasím – všeobecně to použitelné není – právě proto to řeším;-) a udělal jsem na to vlákno…