FTP deployment – Fatal error
- Maxell92
- Člen | 38
Ahoj,
zkouším nástroj FTP deployment, ale mám s ním menší problém. Nastavil deployment.ini a když spustím deploy, připojí se na server, zahlásí, že nenašel .htdeployment a začne vypisovat ignorované soubory. Následně ale přijde následující hláška:
Fatal error: Using $this when not in object context in /tools/Deployment/libs/Preprocessor.php on line 78
na řádku 78 se rekurzivně volá
$s = $this->expandCssImports($s, $file);
Pokud v deployment.php zakomentuji řádek č. 82 –
$deployment->addFilter('css', array($preprocessor, 'expandCssImports'));
vše funguje.
Dokáže někdo poradit?
- MartinitCZ
- Člen | 580
@**enumag**: Autorem je David Grudl :)
@**mkoubik**: Nevidim žádný důvod proč by to mělo být špatně.
Závisí na verzi PHP a pokud je to tvořeno pouze pro poslední verzi, tak je
snad vše OK :)
- mkoubik
- Člen | 728
@enumag
To co jsi napsal je samozřejmě ještě horší :-) a ten syntax sugar
v 5.4 nahrazuje přesně tohle. Nicméně anonymní třída by měla být
pokud možno bezstavová – vezme vstup a vrátí výstup
(deterministicky/nedeterministicky – to je jedno), nic víc. Pokud potřebuje
pracovat s nějakým stavem (byť je to třeba $this
v aktuálním kontextu), tak se předá přes use a tím je jasně vidět na
čem ta closure závisí.
Tady bych konkrétně použil use ($preprocessor)
a uvnitř closury
$preprocessor->expandCssImports(...)
Pokud bychom ji totiž třeba uložili do proměnné a poslali do jiného
objektu, tak bude $this
matoucí – referuje stav objektu, ve
kterém closura vznikla a se kterým je jaksi tajemně propojena, ale tváří
se to jako vnitřní stav té closury.
Asi jsem to nenapsal moc srozumitelně, ale nechce se mi to rozebírat
podrobně – jsme tady off topic.
Editoval mkoubik (24. 11. 2012 16:35)
- enumag
- Člen | 2118
@martinit: Všiml jsem si. A co jako? :-) Stějně to měl uvést v composer.json.
@mkoubik: Souhlasím s tím, že je nesmysl to $this používat pokud tu closure předávám jinam. Pokud ji ale mám jen napsanou na místě jako callback pro volanou funkci (což je tento případ) tak mi použití $this připadá v pořádku.
- Filip Procházka
- Moderator | 4668
To jako to má David napsané je naprosto v pořádku. Nechápu co tady řešíte.
@Maxell92 ty si aktualizuj PHP na localhostu
@mkoubik a ty pošli pullrequest, aby to fungovalo i na 5.3 ;)