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.