ARCHIV |
|||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
Kompilátor PHP - projekt PhalangerProjekt Phalanger je kompilátor jazyka PHP pro .NET. Co je Phalanger?Projekt Phalanger je kompilátor jazyka PHP pro .NET a od verze 2.0 i pro platformu Mono. Projekt vznikl původně pouze pro .NET, ale jedním z cílů verze 2.0 je plná podpora pro Mono a běh na serveru Apache (pomocí rozšíření mod-Mono). Phalanger je vyvíjený pod Shared Source licencí, která umožňuje jeho úpravu, rozvoj i redistribuci včetně komerčního užití. Více informací o projektu, včetně zdrojových kódů a binární distribuce poslední verze naleznete na webu projektu. PHP je dynamický jazyk a tak by jeho kompilace do nativního kódu byla nesmírně složitá. I svým
návrhem (tím, že se jedná o skriptovací jazyk) je mnohem vhodnější pro interpretaci, tak jak
to dělá standardní PHP. Phalanger se snaží volit zlatou střední cestu - tedy to co je možné
snadno zkompilovat, to se zkompiluje a tam, kde to možné není tam se provede kompilace až za běhu
(například při použití funkce Čím je Phalanger zajímavý?Cílem Phalangeru je za prvé co nejlepší kompatibilita se stávajícími PHP aplikacemi, co nejvyšši výkon zkompilovaného kódu a rozšíření PHP tak, aby jej bylo možné použít i pro vývoj aplikací založených na platformě Mono (včetně použití libovolných knihoven, které jsou na Monu dostupné). Krátký přehled možných použití Phalangeru by tedy vypadal takto:
Kompilace PHP aplikacíPhalanger je založený na Mono platformě a tak při spuštění webu (nebo i jiné aplikace) v PHP proběhne několik kroků. Nejprve je potřeba aplikaci zkompilovat - to se provede automaticky při prvním dotazu a výsledek se uloží do cache. Pokud dojde ke změně ve skriptu tak se zkompilovaná verze z cache odstraní, takže lze aplikaci upravovat stejně jednoduše jako je v PHP dobrým zvykem. V Phalangeru přibývá ještě jedna možnost a to aplikaci předkompilovat a distribuovat pouze ve zkompilované podobě. Co se tedy přesně stane když spouštíte PHP aplikaci pod Phalangerem?
Phalanger Hello worldNejprve tedy ukážu jak v PHP napsat a pomocí Phalangeru zkompilovat jednoduchou konzolovou aplikaci. Vše jsem testoval s poslední verzí Mona (tedy 1.2.1). Po stažení a instalaci Mona si stáhněte z stránky Phalangeru binární distribuci pro Mono (ZIP soubor) a rozbalte ji do vámi zvoleného adresáře. Následně je potřeba do global assembly cache (speciální umístění kam Mono ukládá sdílené knihovny) zaregistrovat několik knihoven Phalangeru. To provedete následujícím příkazem (spuštěným v adresáři Bin): gacutil -i PhpNetCore.dll gacutil -i PhpNetCore.IL.dll gacutil -i PhpNetClassLibrary.dll Nyní se tedy konečně dostáváme k skutečnému programování. Někde na disku si vytvoříme soubor "hello.php" s následujícím obsahem: <? echo "Hello world!"; ?> Protože chceme aplikaci nejprve zkompilovat (budeme jí potom zpouštět pomocí Mono runtime
z příkazové řádky), tak pomocí následujícího příkazu spustíme kompilátor mono ../Bin/phpc.exe hello.php Pokud vše proběhne v pořádku, tak by měl vzniknout adresář bin se zkompilovanou aplikací (tedy souborem "hello.exe"). Tuto zkompilovanou aplikaci můžete pustit opět příkazem: mono bin/hello.exe PHP a Gtk#Předcházející triviální příklad používal pouze standardní knihovny PHP. Ještě bych ale v tomto
článku rád ukázal jak je možné díky Phalangeru pracovat s knihovnami tříd Mona. Na ukázku použijeme
knihovny Podíváme se tedy jak vytvořit aplikaci, kterou můžete vidět na obrázku. Tentokrát tedy bude kromě
samotného zdrojového kódu potřeba vytvořit i konfigurační soubor, který bude Phalangeru říkat jaké knihovny
se mají z Mona použít. Začnu tedy s konfiguračním souborem - zde je důležité i jméno, takže ho
pojmenujeme <?xml version="1.0" encoding="UTF-8"?> <configuration> <configSections> <!-- Registrace sekce pro konfiguraci Phalangeru --> <section name="phpNet" type="PHP.Core.ConfigurationSectionHandler, PhpNetCore, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71" /> </configSections> <phpNet> <!-- Seznam knihoven, ktere aplikace referencuje --> <classLibrary> <add assembly="mscorlib" /> <add assembly="System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <add assembly="gnome-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" /> <add assembly="gtk-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" /> </classLibrary> <compiler> <!-- Nastaveni kompilatoru - rozsireni pro praci s Monem --> <set name="LanguageFeatures"> <add value="PhpClr" /> </set> </compiler> </phpNet> </configuration> Konfigurace pomocí gacutil -l Pokud již máme správně nastavený konfigurační soubor, můžeme se pustit do programování Gtk# Hello world aplikace. Gtk# je knihovna, která umožňuje pod Monem objektový vývoj GUI aplikací. Gtk# je postavené nad Gtk a pracuje se tedy se stejnými objekty jako Gtk aplikace psané například v jazyce C. Zdrojový kód ukázkové aplikace vypadá takto: <?php // Import jmennych prostoru ve kterych jsou potrebne objekty (PHP/CLR) import namespace System; import namespace Gtk; import namespace Gnome; class MyProgram { // Vstupni bod aplikace - rozsireni PHP/CLR static function Main() { // Spousteni programu new MyProgram(); } // Hlavni widget aplikace var $app; function MyProgram() { // Inicializace programu a aplikace $program = new Program("MyProgram", "0.0", Modules::$UI, array()); $this->app = new App("MyProgram", "MyWindow"); $this->app->SetDefaultSize(400, 300); $this->app->Remove($this->app->Child); // Vytvoreni tlacitka $btn = new Button("Click me!"); $btn->BorderWidth = 20; $this->app->Child = $btn; // Nastaveni zpracovani udalosti $btn->Clicked->Add (new EventHandler(array($this, "ButtonClick"))); $this->app->DeleteEvent->Add (new DeleteEventHandler(array($this, "OnAppDelete"))); // Start $this->app->ShowAll(); $program->Run(); } // Pri kliknuti na tlacitko se zobrazi dialogove okno function ButtonClick($o, $e) { $dlg = new MessageDialog($this->app, DialogFlags::DestroyWithParent, MessageType::Warning, ButtonsType::Close, "Hello world from PHP Gtk#!"); $dlg->Run(); $dlg->Destroy(); } // Pri zavreni okna ukoncime aplikaci function OnAppDelete($o, $e) { Application::Quit(); } } ?> (Celé demo si můžete stáhnout zazipované zde) Jistě jste si všimli, že zdrojový kód obsahuje několik vlastností, které nejsou součástí
standardní verze jazyka PHP. Jedná se v první řadě o podporu namespaces o které jsem se již zmiňoval.
V aplikaci používáme jmenné prostory Zdrojový kód obsahuje jednu třídu ( Na závěrV tomto článku jsme se věnovali jenom části toho co Phalanger umožňuje, ale věřím že některé možnosti tohoto projektu vás zaujaly. Díky Phalangeru lze při psaní PHP aplikací zároveň využít všech výhod platformy Mono, jako je přenositelnost, stále se rozrůstající knihovna tříd, rychlost a jednotné prostředí pro více jazyků, díky kterému je možné při psaní aplikace kombinovat více programovacích jazyků. Přednáška o PhalangeruPokud se chcete o Phalangeru dozvědět více, pak můžete přijít na přednášku, která se o tomto projektu bude konat 12.12. od 18:00. Více informací o přednášce a registrace na akci.
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera 12.11.2018 21:28 /Redakce Linuxsoft.cz 6.11.2018 2:04 /František Kučera 4.10.2018 21:30 /Ondřej Čečák 18.9.2018 23:30 /František Kučera 9.9.2018 14:15 /Redakce Linuxsoft.cz 12.8.2018 16:58 /František Kučera 16.7.2018 1:05 /František Kučera
Poslední diskuze
31.7.2023 14:13 /
Linda Graham 30.11.2022 9:32 /
Kyle McDermott 13.12.2018 10:57 /
Jan Mareš 2.12.2018 23:56 /
František Kučera 5.10.2018 17:12 /
Jakub Kuljovsky | |||
ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze |