Recently I had some time to dig more with haXe Php. The major question was how does it integrate with existing native Php ? I’m glad to say that it works fine!
Let’s start a quick overview of our native Php file test (Simple.class.php) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | <?php function makeSimple($text) { return new Simple($text); } function affichText($text) { echo $text; } class Simple { public $text; public $tab; public function __construct($text) { $this->text = $text; $this->tab[0] = "index 0"; $this->tab[1] = "index 1"; } public function doPrint() { echo $this->text; } protected function changeText($text) { $this->text = $text; } } class Simple2 extends Simple { public function __construct($text) { parent::__construct($text); } public function makeChange($text) { $this->changeText($text); } public function associativeArray() { $tab["num1"] = "number 1"; $tab["num2"] = "number 2"; return $tab; } } ?> |
There are a simple function, some inheritance stuff and an associative array which is very common in Php.
Now the haXe part :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | package; import php.Lib; class Test { static function main() { new Test(); } public function new() { // import php file untyped __call__("require_once", "Simple.class.php"); // call a php function with an arg untyped __call__("affichText", "first msg </br>"); // create a php object with an arg var myPhpObject:Dynamic = untyped __call__('new Simple2', 'second msg </br>'); // manipulate the object myPhpObject.doPrint(); myPhpObject.makeChange("some new text </br>"); myPhpObject.doPrint(); // print an array Lib.print(myPhpObject.tab); // trace the index 0 value trace(myPhpObject.tab[0]); // make some native php untyped __php__("echo '</br>php native from haXe !</br>'"); // we need a Hashtable to parse an associative array from php : var phpAssociativeArray:Hash<String> = Lib.hashOfAssociativeArray(myPhpObject.associativeArray()); // trace the key value num2 trace(phpAssociativeArray.get("num2")); } } |
The output log :
first msg second msg some new text ["index 0", "index 1"]Test.hx:32: index 0 php native from haXe ! Test.hx:41: number 2
If you are using everyday libraries/tools written in Php, you may wrap them with haXe for more comfort. Take a look there : Wrapping External PHP Libraries & the haXe Magic.
Unfortunately, there isn’t lots of ressources/tutorials for haXe Php on the website, I will update this post if I go deeper in haXe Php development. It is very pleasant to write Php this way. Give it a try!
haXe API.
Read this page first
http://haxe.org/doc/php/extern_libraries !!!
Hello, I read it before writing this post. Am I doing something wrong ?
If I’m just using some php code, I must wrap it ?
Hello!
Awhile ago I started wrapping some native php methods but never got around to finishing it, but NativeArray should be complete and working. The only down side is you cant do the following
var myArray:NativeArray = [];
</code
as [] gets translated into a haxe/php's custom array. Instead you have to do the following
var myArray:NativeArray<String = NativeArray.create();
which is ugly, but works. There is also NativeString, NativeMath and NativeVariable. NativeVariable and NativeMath are incomplete.
I didn't get around to trying to get Lib.hashOfAssociativeArray() or Lib.toPhpArray() to work with these.
Hi all. Glad to see some other people getting into the PHP target. Funnily, or strangely, the guy who wrote the target (Franco) doesn’t actually use it as he does all his stuff in Node JS, so we (Touch My Pixel) were the people using it the most for a while.
I’m currently I’m using my Poko haxe framework in a Silicon Valley startup (fanplayr.com – at least the dashboard/backend, not the front-end site) and it works great. Have heaps of extern classes for FB wrappers, Shopify etc.
Anyway, good luck with it!
Hey, indeed that’s a bit weird!
I take a look on the Poko google code, it’s very interesting! Lots of great stuff!
Keep rockin’ guys !