Dieses Paket implementiert Unterstützung für die Ausführung von PHP -Skripten, den Exportieren von GO -Variablen für die Verwendung in PHP -Kontexten, das Anhängen von GO -Methodenempfängern als PHP -Klassen und die Rückgabe von PHP -Variablen zur Verwendung in GO -Kontexten.
Sowohl PHP 5.x- als auch PHP 7.x -Serien werden unterstützt.
Um dieses Paket zu erstellen, müssen Sie PHP als Bibliothek installiert. Für die meisten Linux-Systeme kann dies normalerweise im php-embed -Paket oder im Variationen davon gefunden werden.
Sobald die PHP -Bibliothek verfügbar ist, können die Bindungen mit go build zusammengestellt werden und sind go get -able.
HINWEIS : Aufbau gegen PHP 5.x erfordert, dass das php5 -Tag bereitgestellt wird, dh:
go get -tags php5 github.com/deuill/go-phpDies liegt an der Tatsache, dass PHP 7.x das Standard -Build -Ziel ist.
Die Ausführung von PHP -Skriptdateien sowie Inline -Zeichenfolgen wird unterstützt und stabil.
Bindungs -GO -Werte als PHP -Variablen sind für die meisten Basistypen zulässig, und PHP -Werte, die aus eval'd -Zeichenfolgen zurückgegeben werden, können in GO -Kontexten als interface{} -Werte konvertiert und verwendet werden.
Es ist möglich, GO -Methodenempfänger als PHP -Klassen anzuhängen, mit vollständiger Unterstützung für das Aufrufen von exporierten Methoden sowie das Abrufen und Festlegen von eingebetteten Feldern (für Methodenempfänger vom Typ struct -Typ).
Beachten Sie, dass PHP standardmäßig nicht so ausgelegt ist, dass sie in Multithread -Umgebungen verwendet werden (was die Verwendung dieser Bindungen mit Goroutinen stark einschränkt), wenn sie nicht mit ZTS -Unterstützung erstellt werden. In der ZTS -Unterstützung wurde jedoch ein großes Refactoring zwischen PHP 5 und Php 7 verfolgt und wird als solche derzeit nicht durch dieses Paket unterstützt.
Derzeit wird empfohlen, die Verwendung von separaten Kontexten zwischen Goroutinen entweder zu synchronisieren oder einen einzelnen Kontext unter allen laufenden Goroutinen zu teilen.
Derzeit fehlt das Paket in mehrfacher Hinsicht:
Diese Artikel werden in der Reihenfolge ihrer Signifikanz angepasst (was möglicherweise nicht die oben gezeigte Reihenfolge ist).
Das Ausführen eines Skripts ist einfach:
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 ()
} Das obige wird Skriptdatei index.php im aktuellen Ordner ausführen und schreiben jede Ausgabe an den io.Writer , der Context.Output zugewiesen ist (in diesem Fall die Standardausgabe).
Das folgende Beispiel zeigt Bindungs -A -GO -Variable an den laufenden PHP -Kontext und die Rückgabe einer PHP -Variablen für die Verwendung in GO:
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 ()
} Ein String -Wert "Hallo" wird mit Context.Bind unter einem Namen var (in PHP als $var erhältlich) angehängt. Ein Skript wird mit Context.Eval .
Schließlich wird der Wert als interface{} mit Value.Interface() zurückgegeben (man könnte auch Value.String() verwenden, obwohl beide in diesem Fall gleichwertig sind).
Der gesamte Code in diesem Repository wird durch die Bedingungen der MIT -Lizenz abgedeckt, deren Volltext in der Lizenzdatei zu finden ist.