แพ็คเกจนี้ใช้การสนับสนุนสำหรับการดำเนินการสคริปต์ PHP, การส่งออกตัวแปร GO สำหรับใช้ในบริบท PHP, การแนบตัวรับเมธอด GO เป็นคลาส PHP และตัวแปร PHP ที่ส่งคืนสำหรับการใช้งานในบริบท GO
รองรับทั้งชุด PHP 5.X และ PHP 7.x
การสร้างแพ็คเกจนี้ต้องการให้คุณติดตั้ง PHP เป็นห้องสมุด สำหรับระบบ Linux ส่วนใหญ่มักจะพบได้ในแพ็คเกจ php-embed หรือรูปแบบดังกล่าว
เมื่อห้องสมุด PHP พร้อมใช้งานการผูกสามารถรวบรวมได้ด้วย go build และ go get -able
หมายเหตุ : การสร้างกับ PHP 5.x ต้องการให้มีการให้แท็ก php5 เช่น:
go get -tags php5 github.com/deuill/go-phpนี่เป็นเพราะความจริงที่ว่า PHP 7.x เป็นเป้าหมายการสร้างเริ่มต้น
การเรียกใช้ไฟล์สคริปต์ PHP และสตริงอินไลน์ได้รับการสนับสนุนและเสถียร
ค่าการเชื่อมโยง GO เป็นตัวแปร PHP ได้รับอนุญาตสำหรับประเภทฐานส่วนใหญ่และค่า PHP ที่ส่งคืนจากสตริง Eval'd สามารถแปลงและใช้ในบริบท GO เป็นค่า interface{} ค่า
เป็นไปได้ที่จะแนบเครื่องรับเมธอด GO เป็นคลาส PHP พร้อมการสนับสนุนอย่างเต็มที่สำหรับวิธีการโทรหาวิธีการที่หมดอายุเช่นเดียวกับการรับและการตั้งค่าฟิลด์ฝังตัว (สำหรับตัวรับวิธีการแบบ struct )
โปรดทราบว่าโดยค่าเริ่มต้น PHP ไม่ได้ ถูกออกแบบมาเพื่อใช้ในสภาพแวดล้อมแบบมัลติเธรด (ซึ่ง จำกัด การใช้การผูกเหล่านี้อย่างรุนแรงกับ goroutines) หากไม่ได้สร้างด้วยการสนับสนุน ZTS อย่างไรก็ตามการสนับสนุนของ ZTS ได้เห็นการปรับโครงสร้างที่สำคัญระหว่าง PHP 5 และ PHP 7 และปัจจุบันไม่ได้รับการสนับสนุนจากแพ็คเกจนี้
ปัจจุบันขอแนะนำให้ซิงค์การใช้บริบทแยกระหว่าง goroutines หรือแบ่งปันบริบทเดียวระหว่าง goroutines ที่ทำงานทั้งหมด
ปัจจุบันแพ็คเกจขาดหลายประการ:
รายการเหล่านี้จะถูกแก้ไขตามลำดับความสำคัญ (ซึ่งอาจไม่ใช่คำสั่งที่แสดงด้านบน)
การดำเนินการสคริปต์นั้นง่าย:
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 ()
} ข้างต้นจะเรียกใช้งานไฟล์สคริปต์ index.php ที่อยู่ในโฟลเดอร์ปัจจุบันและจะเขียนผลลัพธ์ใด ๆ ไปยัง io.Writer ที่กำหนดให้กับ Context.Output (ในกรณีนี้เอาต์พุตมาตรฐาน)
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการเชื่อมโยงตัวแปร GO กับบริบท PHP ที่กำลังทำงานอยู่และส่งคืนตัวแปร PHP สำหรับใช้ใน 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 ()
} มีการแนบค่าสตริง "สวัสดี" โดยใช้ Context.Bind ภายใต้ชื่อ var (มีอยู่ใน php เป็น $var ) สคริปต์ถูกเรียกใช้งานแบบอินไลน์โดยใช้ Context.Eval รวมค่าที่แนบมากับสตริง PHP และส่งคืนไปยังผู้ใช้
ในที่สุดค่าจะถูกส่งคืนเป็น interface{} โดยใช้ Value.Interface() (หนึ่งสามารถใช้ Value.String() แม้ว่าทั้งคู่จะเทียบเท่าในกรณีนี้)
รหัสทั้งหมดในที่เก็บนี้ครอบคลุมโดยข้อกำหนดของใบอนุญาต MIT ข้อความทั้งหมดที่สามารถพบได้ในไฟล์ใบอนุญาต