Delphi for PHP

Školení, která pořádám

Recenze vyšla v časopisu Connect 6/07 pod názvem Práce kvapná, málo platná.

CodeGearDelphi for PHP je nový produkt firmy CodeGear (vzešlé z firmy Borland), který dovoluje vytvářet webové aplikace v programovacím jazyce PHP stejně pohodlně, jako se vytvářejí desktopové aplikace v Delphi. Využívá se k tomu volně dostupná knihovna komponent VCL for PHP (Visual Component Library od firmy Qadram) a propracované vývojové prostředí.

Instalace

Instalace probíhá bez problémů a jediné, co nás v dnešní době může překvapit, je vytvoření kořenového adresáře tmp, který se používá pro ukládání zkompilovaných šablon Smarty. Tento adresář byl zvolen pravděpodobně kvůli snadnému vystavení vytvořeného projektu na Unixové servery, pro nasazení na zabezpečené servery ho ale stejně bude nutné obvykle změnit. To bohužel nejde udělat jinak než editací zdrojového kódu knihovny VCL.

Instalace obsahuje i vlastní kopii webového serveru Apache a interpretu PHP, takže Delphi for PHP jejich přítomnost nevyžaduje.

Vývojové prostředí

Delphi for PHP

Po nainstalování a spuštění nás přivítá podobné vývojové prostředí, jaké známe z Delphi nebo Visual Studia. Plocha pro kreslení okna a paleta známých komponent vzbuzuje dojem, že budeme vytvářet desktopovou aplikaci, proto nás může překvapit, že výsledek našeho snažení poběží v běžných webových prohlížečích. Webové prezentace mají přece jen jiné zvyklosti než desktopové aplikace, proto se tento režim hodí jen pro specifické použití (webmailový klient, administrační rozhraní, možná i Intranet). Pokud potřebujeme vytvořit běžnou webovou prezentaci, lze využít vestavěnou podporu šablonovacího systému Smarty s tím, že i v rámci šablon můžeme používat komponenty VCL.

Přidávání objektů ve Form Designeru generuje zdrojový kód, který bohužel nerespektuje nastavení editoru pro odsazování. Pokud do tohoto kódu začneme cokoliv dopisovat, spolehlivě se odsazení rozhodí. K duhu tak přijde nástroj Source Formatter, který má dokonce i vlastní klávesovou zkratku. Nastavení objektů z Object Inspectoru je ukládáno do souboru s koncovkou .xml.php, který zřejmě z důvodu ochrany proti zobrazení zdrojového kódu XML dat začíná značkou <?php. Škoda, že tato myšlenka nebyla dotažena do konce, např. zavoláním PHP funkce __halt_compiler. Za současného stavu se při zadání názvu těchto souborů do adresního řádku prohlížeče zobrazí chybová hláška. Hodnoty se při ukládání do tohoto souboru navíc odpovídajícím způsobem neošetří, takže např. zadání hodnoty </property> učiní soubor nečitelným.

Pomocí Object Inspectoru lze editovat jednotlivé vlastnosti komponent (jako třeba šířku nebo popisek), nastavovat obsluhu událostí ošetřovaných na straně serveru a také na straně prohlížeče v JavaScriptu. Pomocí vlastností formuláře TemplateEngine a TemplateFilename lze kód aplikace propojit se šablonovacím systémem, který se bude starat o vypisování HTML kódu. Pokud tuto funkci použijeme, přestane bohužel fungovat obsluha událostí v JavaScriptu. Když vygenerování HTML necháme na Delphi for PHP, dostaneme sice nevalidní, ale ne nijak příšerný kód.

Ladění, databáze, internacionalizace

Vývojové prostředí umožňuje i ladění aplikací, ke kterému se používá nástroj PHP DBG, který se dá stáhnout a používat i nezávisle na Delphi. Ladění nabízí obvyklé základní operace jako je definování zarážek, krokování kódu a sledování kukátek.

Nezbytnou součástí většiny webových aplikací je práce s databází. Paleta Data Explorer umožňuje přímo pracovat s databázemi MySQL a Interbase, pro přístup k databázím se ale používá knihovna ADOdb, která dovoluje pracovat i s řadou dalších databází. Z Data Exploreru lze do formuláře přetahovat tabulky a jejich sloupce, což způsobí vytvoření komponent pro přímou editaci záznamů.

Potenciálně užitečnou, nicméně poměrně obtížně použitelnou funkcí je internacionalizace aplikace. Knihovna VCL k tomu využívá rozšíření Gettext a průvodce zabudovaný v Delphi for PHP umožňuje shromáždit překládané texty a určit jazyky, ve kterých naše aplikace bude běžet. Překládané texty se shromažďují bohužel pouze ze zdrojového kódu. U formulářů je možné vlastností Language určit, ke kterému jazyku se vztahují – úprava téhož formuláře ve všech jazycích je nicméně úmorná manuální práce. Překlad textů v šablonách není řešen vůbec, přestože pro Smarty existuje doplněk, který umožňuje rozšíření Gettext používat. Přepínání jazyka je ponecháno v režii aplikace.

Publikace, nápověda

Nezbytnou součástí vývoje programu je přesun z vývojového počítače na produkční server. K tomu je určen nástroj Deployment Wizard, který do určeného adresáře nahraje všechny soubory z projektu a do podadresáře vcl také nezbytné části knihovny VCL. Pokud chceme na běžný webhosting umístit jeden projekt z Delphi for PHP, je tato funkce velice užitečná, pokud máme ale na serveru projektů více, je vhodnější do sdíleného adresáře nahrát celou knihovnu VCL, takže ji bude možné také snadněji aktualizovat. Deployment Wizard nefunguje zcela dokonale – např. šablony uložené v jiném adresáři než hlavní kód jsou nahrány do stejného adresáře, ale v kódu je ponechána relativní cesta, takže program bez dalších zásahů nefunguje.

Nápověda ve formátu HTML Help má dvě části – jednu pro samotné vývojové prostředí a druhou pro knihovnu VCL. Nainstaluje se i nápověda PHP, ta je však při pokusu získat nápovědu k PHP funkci ve zdrojovém kódu neaktivní. Naopak se používá u šablon, kde by se asi lépe hodila nápověda pro Smarty. Nápověda je na většině míst velice strohá – např. kontextová nápověda v Object Inspectoru u políčka Action u formuláře nás zavede na stránku nápovědy Page.getAction, kde je uveden popis „Action property“. Pro pochopení toho, co která funkce dělá, je proto nutné se často podívat i do zdrojového kódu VCL. Pro základní seznámení s nabízenými funkcemi je k dispozici několik tutoriálů v nápovědě vývojového prostředí a také několik ukázkových aplikací. Nehledejte je však přímo v nainstalovaném adresáři nebo v podadresáři help, k dispozici jsou v podadresáři vcl\samples.

Závěr

Poměrně rychlé vydání Delphi for PHP se bohužel neobešlo bez několika komplikací – mimo jiné nefungovalo ukládání řetězců v kódování UTF-8 a projekty bez změny zdrojového kódu VCL nešly spustit v PHP 5.2.1. Krátce po vydání oficiální verze naštěstí následoval první update, který ty nejzávažnější nedostatky řeší. Registrovaní uživatelé si ho mohou zdarma stáhnout z Internetu.

Pokud se chystáte vyvíjet funkčně bohatou aplikaci, která má běžet ve webovém prohlížeči, je Delphi for PHP myslím dobrá volba bez velké konkurence (pro čistě desktopovou aplikaci je možné použít PHP-GTK). Jestliže hledáte vývojové prostředí pro PHP, existují myslím lepší aplikace (např. Zend Studio, Eclipse nebo i některé textové editory), Delphi for PHP v tomto ohledu nabízí komfort spíše podprůměrný. Pokud chcete vytvořit běžnou webovou prezentaci, lze k tomu Delphi for PHP díky podpoře šablonovacího systému také použít – otázka je, zda prostředí nabízí dostatečnou přidanou hodnotu, když Smarty i VCL jsou k dispozici zdarma.

Na různých místech je vidět, že vydání Delphi for PHP bylo trochu uspěchané – děravá nápověda, zdrojový kód VCL hemžící se komentáři „TODO“ nebo třeba prázdný soubor help\getting_started.htm. V dalších verzích se to však jistě zlepší a pokud se s těmito několika nepříjemnosti dokážete poprat, dá se o Delphi for PHP uvažovat již nyní – pro vývoj bohatých aplikací spouštěných z prohlížeče má před sebou myslím slibnou budoucnost.

Jakub Vrána, Seznámení s oblastí, 2.7.2007, diskuse: 11 (nové: 0)

Diskuse

ikona Marty:

Jen doplním: http://dn.codegear.com/video/php - pár videí k Delphi for PHP (např. klasické "hello world")

Michal:

Přeložit breakpoint jako zarážku už jsem viděl, ale říkat watchpointu kukátko mě celkem dostalo. Asi málo čtu české počítačové texty ;-)

ikona Jakub Vrána OpenID:

Já zase prvně slyším watchpoint, obvykle se používá jen watch ;-).

Michal:

"GDB používá pojem watchpoint" + "Michal používá GDB" -> "Michal používá pojem watchpoint"

Tak tak. Ale kukátko je stejně boží, vo tom žádná ;-)

Mastodont:

Kukátko používá Microsoft (už kdysi dávno v Excelu tuším 5). A tudíž je to standard :-))

~:

Microsoft je banda BFU profitujicich diky svym marketingovym schopnostem. Breakpoint a watch znam asi od 6-ti let, ale kukatko a zarazku jsem nerozpoznal, autor ma zrejme cit pro przneni originalni, mezinarodni a kvalitni terminologie, nema?

error414:

Neverim tomu ze to bude mit uspech protoze

"Po nainstalování a spuštění nás přivítá podobné vývojové prostředí, jaké známe z Delphi nebo Visual Studia. Plocha pro kreslení okna a paleta známých komponent vzbuzuje dojem, že budeme vytvářet desktopovou aplikaci, proto nás může překvapit, že výsledek našeho ........"

Jitka Dařbujanová:

velmi zajímavý článek : http://latrine.dgx.cz/smejeme-se-s-delphi-for-php . Mě přesvědčil k tomu nevěnovat nadále tomuto produktu pozornost...

nick:

var
Help:string;
begin
Help := ExtractFilePath(Application.ExeName) + 'help.txt';
Winexec(PChar('c:\windows\notepad.exe '+ Help), SW_SHOWNORMAL);
end;
funguje takhle hepl?

cimprcampr:

pouzij radsi toto:
Help := ExtractFilePath(Application.ExeName) + 'help.txt';
ShellExecute(Application.Handle, 'open', pchar(Help), nil, nil, SW_SHOWNORMAL);

otevre se ti defaultne nastaveny prohlizec txt souboru

(do uses nezapomen dat unitu ShellAPI)

Zend Studio:

Delphi for PHP - dá se to vůbec rozumě použít k nějakému vývoji ??? nebo je to jenom výstřel do tmy :)

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.