Este paquete implementa el soporte para ejecutar scripts PHP, exportar variables GO para su uso en contextos PHP, adjuntar los receptores de métodos GO como clases de PHP y devolver variables PHP para su uso en contextos GO.
Se admiten la serie PHP 5.x y Php 7.x.
Construir este paquete requiere que tenga PHP instalado como una biblioteca. Para la mayoría de los sistemas de Linux, esto generalmente se puede encontrar en el paquete php-embed , o las variaciones de los mismos.
Una vez que la biblioteca PHP está disponible, los enlaces se pueden compilar con go build y go get -able.
Nota : Construir contra PHP 5.x requiere que se proporcione la etiqueta php5 , es decir:
go get -tags php5 github.com/deuill/go-phpEsto se debe al hecho de que Php 7.x es el objetivo de compilación predeterminado.
La ejecución de archivos de script PHP, así como cadenas en línea, es compatible y estable.
Los valores de GO de enlace como variables PHP están permitidas para la mayoría de los tipos de base, y los valores de PHP devueltos de las cadenas evaluadas se pueden convertir y usar en contextos GO como valores interface{} .
Es posible adjuntar los receptores de métodos GO como clases de PHP, con soporte completo para llamar a los métodos exporados, así como obtener y configurar campos integrados (para receptores de métodos de tipo struct ).
Tenga en cuenta que, por defecto, PHP no está diseñado para usarse en entornos multiproceso (lo que restringe severamente el uso de estas enlaces con las garutinas) si no está construido con soporte ZTS. Sin embargo, el soporte de ZTS ha visto una refactorización importante entre PHP 5 y PHP 7, y como tal actualmente no está respaldada por este paquete.
Actualmente, se recomienda sincronizar el uso de contextos separados entre las goroutinas, o compartir un contexto único entre todas las goroutinas en ejecución.
Actualmente, el paquete carece de varios aspectos:
Estos elementos se abordarán en orden de significación (que puede no ser el orden que se muestra arriba).
Ejecutar un script es simple:
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 ()
} El anterior ejecutará el archivo de script index.php ubicado en la carpeta actual y escribirá cualquier salida al io.Writer asignado a Context.Output (en este caso, la salida estándar).
El siguiente ejemplo demuestra vinculación de una variable GO al contexto de PHP en ejecución y devolviendo una variable PHP para su uso en 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 ()
} Se adjunta un valor de cadena "hola" usando Context.Bind bajo un nombre var (disponible en php como $var ). Un script se ejecuta en línea usando Context.Eval .
Finalmente, el valor se devuelve como una interface{} usando Value.Interface() (también podría usar Value.String() , aunque ambos son equivalentes en este caso).
Todo el código en este repositorio está cubierto por los términos de la licencia MIT, cuyo texto completo se puede encontrar en el archivo de licencia.