该软件包实现了对执行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许可证的条款涵盖,其全文可以在许可证文件中找到。