このパッケージは、PHPスクリプトの実行のサポート、PHPコンテキストで使用するGO変数のエクスポート、GOメソッドレシーバーのPHPクラスとして添付し、GOコンテキストで使用するPHP変数を返すことを実装します。
PHP 5.xとPHP 7.xシリーズの両方がサポートされています。
このパッケージを構築するには、PHPがライブラリとしてインストールされる必要があります。ほとんどのLinuxシステムでは、これは通常、 php-embedパッケージ、またはそのバリエーションに記載されています。
PHPライブラリが利用可能になると、Bindingsを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値は、GOコンテキストでinterface{}値として使用できます。
GOメソッドレシーバーをPHPクラスとして添付し、埋め込まれたメソッドを呼び出し、埋め込みフィールドを取得および設定することを完全にサポートすることができます( struct -typeメソッドレシーバー用)。
デフォルトでは、ZTSサポートで構築されていない場合、PHPはマルチスレッド環境(これらのバインディングの使用をゴルチンで使用することを大幅に制限する)で使用されるようには設計されていないことに注意してください。ただし、ZTSのサポートでは、PHP 5とPHP 7の間の主要なリファクタリングが見られているため、現在このパッケージによってサポートされていません。
現在、ゴルチン間で別々のコンテキストの使用を同期するか、すべての実行中のゴルチンの間で単一のコンテキストを共有することをお勧めします。
現在、パッケージにはいくつかの点で欠けています:
これらの項目は、重要性の順に取り組まれます(上記の順序ではない場合があります)。
スクリプトの実行は簡単です:
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 ()
}文字列値 "hello"は、 Context.Bind var (phpで$varとして使用可能)を使用して添付されています。 Context.Evalを使用してスクリプトがインラインで実行され、添付の値をphp文字列と組み合わせてユーザーに返します。
最後に、値はValue.Interface()を使用してinterface{}として返されます(1つはValue.String()を使用できますが、どちらもこの場合は同等です)。
このリポジトリのすべてのコードは、MITライセンスの条件でカバーされており、その全文はライセンスファイルに記載されています。