تنفذ هذه الحزمة دعم تنفيذ البرامج النصية 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 Script بالإضافة إلى سلاسل مضمّنة ومستقرة.
يُسمح بقيم GO BINDING كمتغيرات 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 ()
} io.Writer ما ورد أعلاه Context.Output برنامج ملف البرنامج index.php .
يوضح المثال التالي ربط متغير 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 ()
} يتم إرفاق قيمة السلسلة "Hello" باستخدام Context.Bind تحت اسم var (متوفر في PHP مثل $var ). يتم تنفيذ البرنامج النصي مضمّنًا باستخدام Context.Eval .
أخيرًا ، يتم إرجاع القيمة interface{} باستخدام Value.Interface() (يمكن للمرء أيضًا استخدام Value.String() ، على الرغم من أن كلاهما مكافئ في هذه الحالة).
تتم تغطية جميع التعليمات البرمجية في هذا المستودع بشروط ترخيص معهد ماساتشوستس للتكنولوجيا ، والتي يمكن العثور عليها النص الكامل في ملف الترخيص.