該軟件包實現了對執行PHP腳本的支持,導出用於在PHP上下文中使用的GO變量,將GO方法接收器作為PHP類並返回PHP變量以在GO上下文中使用。
PHP 5.X和PHP 7.X系列均得到支持。
構建此軟件包要求您將PHP安裝為庫。對於大多數Linux系統,通常可以在php-embed軟件包中找到或變化。
PHP庫可用後,可以使用go build綁定並go get -Able。
注意:使用PHP 5.x建造要求提供php5標籤,即:
go get -tags php5 github.com/deuill/go-php這是由於以下事實:php 7.x是默認的構建目標。
支持和穩定執行PHP腳本文件以及內聯字符串。
對於大多數基本類型,允許使用php變量,綁定的GO值,並且可以將從評估字符串返回的PHP值轉換為interface{}值。
可以將GO方法接收器作為PHP類附加,並全力支持調用經過的實用方法,以及獲取和設置嵌入式字段(對於struct -type方法接收器)。
請注意,默認情況下,PHP並非被設計為在多線程環境中使用(嚴重限制了這些綁定與Goroutines的使用),如果不是使用ZTS支持構建的話。但是,ZTS的支持在PHP 5和PHP 7之間進行了重構,因此目前不受此軟件包的支持。
當前,建議在Goroutines之間同步使用單獨的上下文,或者在所有運行的Goroutines中共享單個上下文。
目前,該包在幾個方面都缺乏:
這些項目將按照重要的順序解決(這可能不是上面顯示的順序)。
執行腳本很簡單:
package main
import (
php "github.com/deuill/go-php"
"os"
)
func main () {
engine , _ := php . New ()
context , _ := engine . NewContext ()
context . Output = os . Stdout
context . Exec ( "index.php" )
engine . Destroy ()
}以上將執行位於當前文件夾中的腳本文件index.php ,並將分配給Context.Output的io.Writer寫入任何輸出(在這種情況下為標準輸出)。
以下示例演示了將GO變量綁定到運行的PHP上下文,並返回一個供GO中使用的PHP變量:
package main
import (
"fmt"
php "github.com/deuill/go-php"
)
func main () {
engine , _ := php . New ()
context , _ := engine . NewContext ()
var str string = "Hello"
context . Bind ( "var" , str )
val , _ := context . Eval ( "return $var.' World';" )
fmt . Printf ( "%s" , val . Interface ())
// Prints 'Hello World' back to the user.
engine . Destroy ()
}使用Context.Bind在名稱var (在php中可用為$var )附加一個字符串值“ hello”。使用Context.Eval將腳本執行。
最後,使用Value.Interface() interface{}返回值(一個人也可以使用Value.String() ,儘管在這種情況下兩者都是等效的)。
本存儲庫中的所有代碼均由MIT許可證的條款涵蓋,其全文可以在許可證文件中找到。