Paket ini mengimplementasikan dukungan untuk menjalankan skrip PHP, mengekspor variabel GO untuk digunakan dalam konteks PHP, melampirkan penerima metode GO sebagai kelas PHP dan mengembalikan variabel PHP untuk digunakan dalam konteks GO.
Seri PHP 5.X dan PHP 7.X didukung.
Membangun paket ini mengharuskan Anda menginstal PHP sebagai perpustakaan. Untuk sebagian besar sistem Linux, ini biasanya dapat ditemukan dalam paket php-embed , atau variasi daripadanya.
Setelah pustaka PHP tersedia, binding dapat dikompilasi dengan go build dan go get -lo.
Catatan : Membangun terhadap PHP 5.x mensyaratkan bahwa tag php5 disediakan, yaitu:
go get -tags php5 github.com/deuill/go-phpIni karena fakta bahwa PHP 7.X adalah target pembuatan default.
Melaksanakan file skrip PHP serta string inline didukung dan stabil.
Nilai GO yang mengikat sebagai variabel PHP diizinkan untuk sebagian besar jenis dasar, dan nilai PHP yang dikembalikan dari string yang dievaluasi dapat dikonversi dan digunakan dalam konteks GO sebagai nilai interface{} .
Dimungkinkan untuk melampirkan penerima metode GO sebagai kelas PHP, dengan dukungan penuh untuk panggilan metode yang dikeluarkan, serta mendapatkan dan mengatur bidang tertanam (untuk penerima metode struct -type).
Ketahuilah bahwa, secara default, PHP tidak dirancang untuk digunakan di lingkungan multithreaded (yang sangat membatasi penggunaan binding ini dengan goroutine) jika tidak dibangun dengan dukungan ZTS. Namun, dukungan ZTS telah melihat refactoring besar antara PHP 5 dan PHP 7, dan karena itu saat ini tidak didukung oleh paket ini.
Saat ini, disarankan untuk menyinkronkan penggunaan konteks terpisah antara goroutine, atau berbagi konteks tunggal di antara semua goroutine yang berjalan.
Saat ini, paket kurang dalam beberapa hal:
Barang -barang ini akan ditangani dalam urutan signifikansi (yang mungkin bukan urutan yang ditunjukkan di atas).
Mengeksekusi skrip itu sederhana:
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 ()
} Di atas akan menjalankan skrip file index.php yang terletak di folder saat ini dan akan menulis output apa pun ke io.Writer yang ditetapkan untuk Context.Output (dalam hal ini, output standar).
Contoh berikut menunjukkan mengikat variabel GO ke konteks PHP yang sedang berjalan, dan mengembalikan variabel PHP untuk digunakan di 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 ()
} Nilai string "halo" dilampirkan menggunakan Context.Bind di bawah nama var (tersedia dalam php sebagai $var ). Sebuah skrip dieksekusi secara inline menggunakan Context.Eval , menyatukan nilai terlampir dengan string PHP dan mengembalikannya ke pengguna.
Akhirnya, nilai dikembalikan sebagai interface{} menggunakan Value.Interface() (seseorang juga dapat menggunakan Value.String() , meskipun keduanya setara dalam kasus ini).
Semua kode dalam repositori ini dicakup oleh ketentuan lisensi MIT, teks lengkapnya dapat ditemukan dalam file lisensi.