Problém s extends Nette\Finder
- Kovik
- Člen | 10
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
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
HosipLan napsal(a):
//edit: To není možné nahradit, protože by to nebylo kompatibilní s php5.2
- Filip Procházka
- Moderator | 4668
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