aardio + PHP 可視化快速開發獨立 EXE 桌面程式

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 程式碼編寫。