aardio 支援與很多程式語言混合開發。
網路上大家分享的 aardio + Python 混合開發的文章很多,aardio + PHP 的文章卻很少。
其實 aardio 與 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 程式:
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();
要注意 PHP 5.2 預設編碼為 GBK,而 aardio 預設編碼為 UTF-8 編碼。
PHP 的註釋語法與 aardio 一樣,
PHP 語句也以分號結束,並且分號不能象 aardio 那樣省略
PHP 中的所有變數必須以 $ 符號開始。 $號是變數的修飾字首,但不是變數名稱的一部分
在PHP中函數內部變數預設為區域性變數(這與aardio,Javascript正好相反),使用 global 語句引入或宣告全域性變數
PHP單引號中是純文字,類似 \n 這樣的跳脫符不起作用,而雙引號中可以使用跳脫符,aardio中也有類似的機制,不過規則正好相反。aardio中雙引號中才是普通文字,單引號中支援跳脫符。
更多語法對比請參考:
aardio 範例 > 呼叫其他語言 > PHP > 語法比較
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 語句返回值。
為了方便測試,首先用下面的 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 的輸出資料了。
下面直接看 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 程式碼編寫。