aardio 支持與很多編程語言混合開發,
網路上大家分享的 aardio + Python 混合開發的文章很多,aardio + PHP 的文章卻很少,
其實 aardio 與 PHP 混合開發是真的簡單 !
? CGI 呼叫 PHP
aardio 雖然很小,但自帶嵌入式 HTTP 服務器,通過 CGI 呼叫 PHP 也非常簡單,
這種方式就跟平時用 PHP 寫網站基本一樣了,而且兼容所有 PHP 版本,下面我們直接看 aardio 代碼示例:
import win.ui; var winform = win.form(text="PHP_CGI 服務器"); import web.form; var wb = web.form( winform); //啟動 PHP CGI 服務端 import process.php; //獲取 PHP 頁面網址 var url = process.php("/res/test.php"); //呼叫瀏覽器組件顯示網頁 wb.go(url); winform.show(); win.loopMessage();
是不是非常簡單?
這就是一個完整的 aardio + PHP 程式,
上面短短幾句代碼包含了:
圖形界面、瀏覽器組件、PHP 服務端、HTTP 服務器,
aardio 把所有需要操心的事都默默地做好了,例如 HTTP 服務器會自動分配空閑埠,不同程式不會相互沖突,在需要時會自動啟動 HTTP 服務端執行緒,在界面執行緒退出時 —— 自動退出 HTTP 服務端,全部都自動處理好,
process.php 會自動搜索 php-cgi.exe,搜索順序如下:
1、\php\php-cgi.exe 2、環境變數 PHP_CGI_EXE_PATH 指定的位置 3、path 環境變數指定的目錄下查找 php-cgi.exe 4、自注冊表搜索 5、C:\Program Files\PHP 目錄下搜索 6、ardio 中 PHP 擴展庫自帶的 ~\lib\php\.dll\php-cgi.exe
也可以用 process.php.cgiPath 明確指定路徑,例如:
process.php.cgiPath = "~\lib\php\.dll\php-cgi.exe"
至于下面的代碼會回傳訪問 "/res/test.php" 的 HTTP 地址:
var url = process.php("/res/test.php");
支持內嵌資源目錄下的檔案路徑:
如果軟體自帶 PHP 組件,在 aardio 中占擊「發布」生成 EXE —— 可點擊「轉換為獨立 EXE」按鈕生成單 EXE 程式:
? 嵌入 PHP
aardio 提供了 php 擴展庫可以直接呼叫 PHP 的解釋器,
php 擴展庫自帶的 PHP 版本為 v5.2 ,這個版本的好處是體積非常小,兼容到 XP,不需要額外再安裝其他 C++ 運行庫,其實用來寫一般的桌面程式夠用了,如果您希望使用高版本 PHP —— 請改用前面講的 CGI 方式呼叫,
aardio 嵌入式呼叫 PHP 示例:
import php; import console; //PHP代碼 var phpcode =/* $a="我是PHP中的變數a"; function main(){ global $a; return $a." 這是main()函式的回傳值"; }; */ //運行 PHP 代碼 php.exec(phpcode) //運行 PHP 代碼,呼叫 PHP 函式回傳值 var ret = php.eval("main()") console.log( ret ); //運行 PHP 代碼,回傳運算式的值 var ret = php.eval("8899") console.log( ret ); //再用 eval 函式訪問 PHP 中的變數 var ret = php.eval("$a") console.log( ret ); //更簡單一些,直接讀 PHP 中的變數,注意去掉變數前面的$符號 console.log("直接讀取PHP中的變數", php.a ) //同上,也可以直接修改 PHP 中的變數 php.global_abc = 2011 //請注意: PHP回傳給aardio的值都是字串型別 console.pause();
? aardio 與 PHP 語法對比
請參考:aardio 編程語言快速入門——語法速覽
要注意 PHP 5.2 默認編碼為 GBK,而 aardio 默認編碼為 UTF-8 編碼,
PHP 的注釋語法與 aardio 一樣,
PHP 陳述句也以分號結束,并且分號不能象 aardio 那樣省略
PHP 中的所有變數必須以 $ 符號開始, $號是變數的修飾前綴,但不是變數名稱的一部分
在PHP中函式內部變數默認為區域變數(這與aardio,Javascript正好相反),使用 global 陳述句引入或宣告全域變數
PHP單引號中是純文本,類似 \n 這樣的轉義符不起作用,而雙引號中可以使用轉義符,aardio中也有類似的機制,不過規則正好相反,aardio中雙引號中才是普通文本,單引號中支持轉義符,
更多語法對比請參考:
aardio 范例 > 呼叫其他語言 > PHP > 語法比較
? PHP 呼叫 aardio
aardio 呼叫 PHP,PHP 再回呼 aardio 代碼:
import php; import console; //PHP代碼 var phpCode =/* $ret = aardio(" import win; import web.json; win.msgbox('我是 aardio 代碼'); return web.json.stringify({a=123;b=456}); ") */ //運行PHP代碼,回傳運算式的值 var ret = php.eval(phpCode) console.log( ret ); console.pause();
注意: aardio 回傳給PHP的值都是字串型別, PHP 呼叫的 aardio 代碼使用 return 陳述句回傳值,
? 嵌入PHP:自定義 PHP 輸出
為了方便測驗,首先用下面的 aardio 代碼生成測驗 PHP 檔案:
phpcode = /* <?php echo "<p>Hello World</p>"; phpinfo(INFO_ALL); ?> */ string.save("/test.php",phpcode )
然后用 aardio 呼叫上面的 test.php :
import php; php.print = function( msg ) { import console; console.log(msg); console.more(); } //執行 PHP 檔案 php.dofile("/test.php")
在 aardio 中只要簡單的定義 php.print 函式,就可以捕獲 PHP 的輸出資料了,
? 嵌入 PHP:重置 PHP 解釋器
下面直接看 aardio 代碼如何重置 PHP 解釋器:
import php; import console; //打開控制臺 console.open(); //重置 PHP 解釋器 php.begin() php.eval("$a=123"); console.log( php.a ); php.end() //重置 PHP 解釋器 php.begin() php.eval("$b=456"); //注意這里PHP中的變數$a已經失效 console.log( php.a,php.b ); php.end() console.pause();
? 混合不同編程語言只是可選項
aardio 雖然可以方便地混合很多編程語言,但混合編程僅僅是可選項,下面這些很受歡迎的桌面軟體 —— 都是使用純 aardio 代碼撰寫,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/509768.html
標籤:PHP
