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

2022-09-28 12:00:22

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