Vytvořil jsem nástroj pro automatický převod skriptů z PHP5 do PHP4. Slouží pro převod nových jazykových konstrukcí OOP. Nahrazuje je ekvivalentními konstrukcemi, které fungují v obou verzích.
Podporovány jsou tyto konstrukce:
- abstraktní třídy a metody (abstract)
- rozhraní (interface, implements)
- nová syntaxe konstruktorů (__construct)
- „finální“ třídy a metody (final)
- modifikátory přístupu (public, protected, private)
- statické atributy a metody (static)
- konstanty uvnitř tříd (const)
- klonování (clone)
- operátor instanceof
- předřaďovač self
- automatické předávání objektů odkazem (viz dříve publikovaná metoda)
- podpora Doc Comments
- kontrola typů type hinting
- omezená podpora výjimek try, throw, catch (nejde o plnohodnotnou náhradu, ta není technicky řešitelná)
Overloading se ponechává beze změny. Cílem převodníku také není nahrazovat chybějící funkce, od toho je tu třeba PEAR PHP_Compat.
Konvertor si můžete naživo vyzkoušet. Pokud narazíte na nějaké chybky, svěřte se v komentářích.
Komentáře
Pachollini #1
Tak to mi tedy připadá jako skvělý nápad, určitě to někdy vyzkouším 😉
martinpav #2
<noflame>
Neviem, nebolo by lepsie na 4-ku zabudnut?
</noflame>
David Grudl #3
#2 martinpave, Vysvětli to například všem klientům Českého Hostingu ☹
martinpav #4
#3 Davide Grudle, Chapem. Nastastie spolupracujem s hostingom ktory ma k dispozicii 4-ku aj 5-ku a mozem si vybrat.
OT: co sa stalo s DiBi ?
Matěj Kloubek #5
Zdravím,
protože všichni naši zákaznící používají v této chvíli PHP4, tak by asi nebylo rozumné na 4 zapomenout.
PHP5 na Českém hostingu bude do konce tohoto roku. Stávající i noví klienti si budou moci vybrat na jaké verzi chtějí hostovat, takže takovéto nástroje určitě přijdou vhod.
David Grudl #6
#5 Matěji Kloubku, ajaj, nechtěl jsem, aby to vyznělo jako útok na Český Hosting, jehož služeb si velmi cením. Budu tedy otázku formulovat lépe: „Vysvětli to všem klientům, kteří kvůli nekompatibilitě jakékoliv části webové aplikace nebudou moci přejít na PHP5.“.
honza #7
zdravim, me by zajimalo cim jste to resil..prekladovy automat?
David Grudl #8
#7 honzo, rozparsuji vstup na pole tokenů funkcí token_get_all. Vytvořil jsem si jednoduchý procesor regulárních výrazů, který umí nad takovým polem pracovat (cca 100 řádků kódu) a definoval regulární výrazy pro jednotlivé konstrukce. Vlastní program (cca 300 řádků) pak už jen postupně vyhledává výskyty těchto výrazů a zaměňuje je do potřebné podoby. Ještě je tam pár triků, které řeší správné odsazení apod.
Celé je to krátké, velice přehledné a především naprosto spolehlivé.
tark #9
#5 Matěji Kloubku, Už se těším, vlastně, už jsem se rozhodl programovat jen pro PHP5 a … nechce se mi hledat jinej hosting.. ;)
T3RMiX #10
Pěkné, už se těším až to vyzkouším v praxi. Co takhle ve volných chvílích udělat PHP4>PHP5 :]
pif #11
me to prijde smesne :))))) proste chapu proc si to udelal, jen se musim smat, zes byl nuceny neco takoveho udelat… Ted uz mi to vazne prijde vtipne, treba ten singleton a vubec plno dalsich vseljakych hacku ktere musis udelat. Ale jinak fajn.
Zend studio ownz :))
johno #12
DGX: No zaujímavý nápad, ale nejaké muchy som našiel.
Petr Krontorad #13
kdyz bez podpory exceptions to nejak ztraci kouzlo.. ne, ze bych vedel, jak to obejit, i kdyz by to minimalne nejak „prasacky“ asi jit mohlo.
kaifman #14
pouzitelnejsi by to spis bylo opacnym smerem 😉
pif #15
jo ta kontrola objektu :)))) to dgx asi opomnel.
David Grudl #16
#12 johno, díky, na Type Hinting jsem úplně zapomněl, je to opravené.
Předávání objektů referencí je asi největší oříšek celého převodu a zdánlivě neřešitelný. Používám tento trik (velmi mě mrzí, že mě nenapadl o pár let dřív), který skutečně v 99 % případů perfektně funguje, jen v převodníku byl vypnutý. Doplnil jsem jej tedy o konfiguraci a teď ho lze aktivovat, viz příklad.
#13 Petře Krontorade, fakt mě nenapadá, jak to řešit. Ani prasácky ☹
#14 kaifmane, opačným směrem jaksi není co převádět
Dovolil jsem ti smazat zcela OT komentáře na téma vyhlazování fontů v Zend Studio, Radek už o tom napsal u sebe.
ATom #17
No, ale chtělo by to verzi schopnout pracovat jako CLI aplikace, která by dokázala dávkově konvertovat celou složku. Takhle je to docela nepraktické pokaždé konvertovat 50 php souboru pojednom.
Jinak to je fakt geniální věc.
Mimochodem __autoload() asi taky řešit nepůjde, co?
Matěj Kloubek #18
Na Českém hostingu můžete používat PHP 5 včetně MySQL 5. Chvilku to trvalo. Do konce února je testovací provoz což neznamená, že by služba nefungovala jak má.
Bjarne #19
Uprimne nechapu proc konvertovat a jeste jen neuplne z vyssi verze do nizsi. Smysluplny by mi pripadala obracena konverze, protoze o to jde vetsinou – rozchodit starsi veci…
Andrew #20
#19 Bjarne, Jak píšeš – nechápeš to. Ten konvertor je pro lidi, kteří píší NOVÉ věci ROVNOU V PHP5, ale nechtějí od nich odstřihnout uživatelé, kteří chtějí/musí používat PHP4.
Mimo to, PHP4 → PHP5 konvertor je logicky hloupost. Stejně by se ten kód musel projít a poupravovat.
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.