Phalanger - spotkanie pierwsze

The Phalanger is a complex solution giving web-application developers the ability to benefit from both the ease-of-use and effectiveness of the PHP language and the power and richness of the .NET platform. This solution enables developers to painlessly deploy and run existing PHP code on an ASP.NET web server and develop cross-platform extensions to such code taking profit from the best from both sides.

Tyle Phalanger User's Guide. Spróbujmy jednak na moment odrzucić maketingowy bełkot i zastanowić się choćby pobieżnie do czego w ogóle takie coś może być przydatne.

PHP.NET

The whole Phalanger class library (including functions implemented in the PHP extensions) is accessible to a .NET programmer regardless to her favorite programming language together with type information and in-library debugging.

I to akurat jest mniej więcej prawda. Parę razy zdarzyło mi się podczas pisania kodu w ASP.NET złapać się na tym, że usiłuję znaleźć rozwiązanie w C# podczas gdy oczami wyobraźni widzę gotową funkcję/metodę/klasę w PHP. Teoretycznie można to teraz rozwiązać wykorzystując klasy PHP w programie napisanym w jakimś języku .NET'owym (C#, VB.NET czy co tam kto lubi). Np. wystarczy dodać do projektu referencję do PHPNetClassLibrary (Phalanger Base Class Library 1.0.0.0), dopisać using PHP.Library i już można korzystać np. z PhpStrings.HtmlEntities() (w trzech wersjach zresztą). Genialne? No prawie...

Znacznie ciekawsza wydaje się możliwość wykorzystania rozszerzeń PHP, które Phalanger dostarcza w całkiem niemałym wyborze. Niektóre z nich (np. php_ming, porównaj rys.1.) są dostępne jako normalne rasowe klasy dla kodu w .NET. Niestety inne (jak np. php_pdf) stanowią jedynie zestaw metod, czy funkcji wręcz, nawet w przybliżeniu nie usiłujący udawać obiektów... Tak czy inaczej funkcjonalność oferowana przez te rozszerzenia jest w całkiem prosty sposób dostępna dla aplikacji .NET.

Rys.1. Phalanger - obiekty PHP w C# - wykorzystanie php_ming

Jak widać na załączonym obrazku działają nawet mechanizmy podpowiadania metod i ich argumentów, chociaż nie wszędzie i szczerze mówiąc do pełnego IntelliSense jeszcze trochę brakuje.

Compatible with PHP 5.0, the object model in Phalanger enables to combine PHP objects with the .NET ones. It is possible to use a class written in PHP from a .NET application

No i to już brzmi zdecydowanie ciekawiej. Teoretycznie można wziąć jakieś istniejące klasy PHP po czym skompilować i używać ich w programie tak jak dowolnych innych bibliotek na platormie .NET. Albo może nawet nie istniejące tylko specjalnie stworzone na tą okazję. A w praktyce ... no w praktyce można dokładnie to samo co w teorii ;-).

Rys.2. Phalanger - biblioteka w PHP używana w C#

PHP trochę inaczej

Do interesujących „nowości” wprowadzanych przez Phalangera należy PHP Console Application — aplikacja napisana w PHP skompilowana do pliku .exe. Sprawa nie jest może genialnie odkrywcza (kompilatory PHP istnieją nie od dziś) jednak możliwość wykonania takiej aplikacji w środowisko .NET i łączenia jej z resztą platformy daje co najmniej kilka ciekawych możliwości, a przynajmniej poszerza horyzonty.

Rys.3. Phalanger - PHP Console Application w trakcie debugowania

Niestety do pewnych rozczarowań trzeba tutaj zaliczyć fakt ograniczonej możliwości debugowania — niby można śledzić wykonanie programu, ale często bez możliwości podglądu zmiennych. Jest to zresztą jawnie powiedziane w dokumentacji:

You can also see some variables in Locals window. But these variables are compiler internal variables and not these you have in your code. It is possible to find there which values the php variables have but it requires more knowledge how php code is compiled by Phalanger compiler.

W poprzednim przykładzie (rys.2.) można „wejść” do metody SayIt(), a w momencie jej debugowania zmienna name jest widoczna jako typ Php.Core.PhpSmartReference i jej właściwość Value zawiera odpowiedni tekst. Niby świetnie. Jednak w przypadku Console Application pokazanym na rys.3. nie ma praktycznie żadnej możliwości zajrzenia co też siedzi np. w takim $d.

I co z tego?

Jak pokazuje powyższa mała wycieczka, Phalangera można wykorzystać nie tylko jako kompilator PHP dla IIS-a, ale również do ciekawszych zastosowań, czyli mniej lub bardziej eleganckiego wplecenia PHP w platformę .NET. Na ile jest to sensowne w praktycznych zastosowaniach, czyli na ile tak powstała aplikacja jest wydajna to już kwestia na kolejną opowieść...

Komentarze

Brak komentarzy do tego wpisu.

 

Uwaga: Ze względu na bardzo intensywną działalność spambotów komentowanie zostało wyłączone po 60 dniach od opublikowania wpisu. Jeżeli faktycznie chcesz jeszcze skomentować skorzystaj ze strony kontaktowej.