Ce package met en œuvre la prise en charge de l'exécution de scripts PHP, de l'exportation de variables GO pour une utilisation dans des contextes PHP, de la connexion des récepteurs de méthode GO comme classes PHP et du renvoi des variables PHP à utiliser dans les contextes GO.
Les séries PHP 5.x et PHP 7.x sont prises en charge.
La construction de ce package nécessite que PHP soit installé en tant que bibliothèque. Pour la plupart des systèmes Linux, cela peut généralement être trouvé dans le package php-embed ou ses variations.
Une fois la bibliothèque PHP disponible, les liaisons peuvent être compilées avec go build et sont go get -able.
Remarque : la construction contre PHP 5.x nécessite que la balise php5 soit fournie, c'est-à-dire:
go get -tags php5 github.com/deuill/go-phpCela est dû au fait que PHP 7.x est la cible de construction par défaut.
L'exécution de fichiers de script PHP ainsi que des chaînes en ligne est prise en charge et stable.
Les valeurs GO de liaison car les variables PHP sont autorisées pour la plupart des types de base, et les valeurs PHP renvoyées à partir des chaînes évaluées peuvent être converties et utilisées dans des contextes GO comme les valeurs interface{} .
Il est possible d'attacher les récepteurs de méthode GO comme classes PHP, avec une prise en charge complète pour appeler des méthodes étendues, ainsi que l'obtention et la définition de champs intégrés (pour les récepteurs de méthode de type struct ).
Sachez que, par défaut, PHP n'est pas conçu pour être utilisé dans des environnements multithread (qui restreint sévèrement l'utilisation de ces liaisons avec Goroutines) si elle n'est pas construite avec le support ZTS. Cependant, le support ZTS a connu un refactorisation majeure entre PHP 5 et PHP 7, et en tant que tel n'est actuellement non pris en charge par ce package.
Actuellement, il est recommandé de synchroniser l'utilisation de contextes séparés entre les goroutines, soit partager un contexte unique entre tous les goroutines en cours d'exécution.
Actuellement, le package manque à plusieurs égards:
Ces éléments seront abordés par ordre de signification (qui peuvent ne pas être l'ordre indiqué ci-dessus).
L'exécution d'un script est 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 ()
} Ce qui précède exécutera le fichier de script index.php situé dans le dossier actuel et écrira toute sortie sur io.Writer attribuée à Context.Output (dans ce cas, la sortie standard).
L'exemple suivant montre la liaison d'une variable GO au contexte PHP en cours et le renvoi d'une variable PHP à utiliser dans 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 ()
} Une valeur de chaîne "bonjour" est jointe à l'aide de Context.Bind sous un nom var (disponible en php comme $var ). Un script est exécuté en ligne à l'aide de Context.Eval , combinant la valeur attachée avec une chaîne PHP et le renvoyant à l'utilisateur.
Enfin, la valeur est renvoyée en tant interface{} en utilisant Value.Interface() (on pourrait également utiliser Value.String() , bien que les deux soient équivalents dans ce cas).
Tout le code de ce référentiel est couvert par les termes de la licence MIT, dont le texte intégral peut être trouvé dans le fichier de licence.