Problém s extends Nette\Finder

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

Pokusil jsem se použít tuto třídu dědící od Nette\Finder a narazil jsem na problém:

Poděděnou třídu použiju takto:

foreach (MyFinder::findFiles('*.jpg')->orderByName()->in($galleryDir) as $file) {
}

Metoda findFiles() vrací původní třídu Finder, (nikoliv mou poděděnou MyFinder) takže u metody orderByName() dojde k chybě protože tu původní Finder neobsahuje.

findFiles obsahuje:

	public static function findFiles($mask)
	{
		if (!is_array($mask)) {
			$mask = func_get_args();
		}
		$finder = new self;
		return $finder->select($mask, 'isFile');
	}

Vyřešil jsem to záměnou

$finder = new self;

za

$finder = new static;

Funguje to ale nejsem si jist jestli jsem tím nevytvořil nějakou jinou chybku?

Používám Nette 2.0 a PHP 5.3

Filip Procházka
Moderator | 4668
+
0
-

Zkus použít Finder::extensionMethod()

//edit: To není možné nahradit, protože by to nebylo kompatibilní s php5.2

Finder::extensionMethod('orderByName', function (Finder $_this) {
	// moje metoda
	return $_this; // popř. new Finder...
});

Editoval HosipLan (29. 4. 2011 11:28)

Patrik Votoček
Člen | 2221
+
0
-

HosipLan napsal(a):

//edit: To není možné nahradit, protože by to nebylo kompatibilní s php5.2

ehm… https://github.com/…on/Image.php#L96

jtousek
Člen | 951
+
0
-

Přesně tak, mělo by to být opraveno přímo ve frameworku.

Ještě dodatek, nemělo by zde a zde místo Finder být self nebo static?

Ondřej Mirtes
Člen | 1536
+
0
-

Všude bych psal static.

Filip Procházka
Moderator | 4668
+
0
-

takže podpora už se jako přestává řešit jo? :D

No každopádně… představ si situaci kdy máš nette převedené pro php5.2, které převede static na self a pak přejdeš na namespaces a máš tam najednou static… no nelibi se mi to… ja bych ty php5.2 zakázal :P