Este pacote implementa suporte para executar scripts PHP, exportar variáveis GO para uso em contextos de PHP, anexando os receptores do método GO como classes PHP e retornando variáveis PHP para uso em contextos GO.
As séries PHP 5.x e PHP 7.x são suportadas.
A construção deste pacote exige que você tenha o PHP instalado como uma biblioteca. Para a maioria dos sistemas Linux, isso geralmente pode ser encontrado no pacote php-embed , ou suas variações.
Depois que a biblioteca PHP estiver disponível, as ligações poderão ser compiladas com go build e go get -Eable.
NOTA : Construindo contra o PHP 5.x exige que a tag php5 seja fornecida, ou seja::
go get -tags php5 github.com/deuill/go-phpIsso se deve ao fato de o PHP 7.x ser o destino de construção padrão.
A execução de arquivos de script PHP, bem como strings embutidos, é suportada e estável.
Os valores GO de ligação como variáveis PHP são permitidos para a maioria dos tipos de base, e os valores de PHP retornados das seqüências de caracteres de avaliação podem ser convertidos e usados em contextos GO como valores interface{} .
É possível anexar os receptores do método GO como classes PHP, com suporte total para chamadas de métodos exportados, além de obter e definir campos incorporados (para receptores do método do tipo struct ).
Esteja ciente de que, por padrão, o PHP não foi projetado para ser usado em ambientes multithread (que restringem severamente o uso dessas ligações com goroutinas) se não forem criados com o suporte ao ZTS. No entanto, o suporte ao ZTS registrou uma grande refatoração entre o PHP 5 e o PHP 7 e, como tal, não é suportado por este pacote.
Atualmente, é recomendável sincronizar o uso de contextos separados entre goroutines ou compartilhar um único contexto entre todas as goroutinas em execução.
Atualmente, o pacote não tem vários aspectos:
Esses itens serão abordados em ordem de significância (que pode não ser a ordem mostrada acima).
Executar um script é simples:
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 ()
} O acima executará o arquivo de script index.php localizado na pasta atual e gravará qualquer saída no io.Writer atribuído ao Context.Output (neste caso, a saída padrão).
O exemplo a seguir demonstra a ligação de uma variável GO para o contexto de php em execução e retornando uma variável PHP para uso no 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 ()
} Um valor da string "Hello" é anexado usando Context.Bind em um nome var (disponível no php como $var ). Um script é executado em linha usando Context.Eval , combinando o valor anexado com uma string php e retornando ao usuário.
Finalmente, o valor é retornado como uma interface{} usando Value.Interface() (também pode usar Value.String() , embora os dois sejam equivalentes neste caso).
Todo o código deste repositório é coberto pelos termos da licença do MIT, cujo texto completo pode ser encontrado no arquivo de licença.