انتقل إلى المحتوى

التشغيل البيني

يعمل Phasis في عملية PHP نفسها التي يعمل فيها تطبيقك، لذا تنتقل القيم بين PHP وJavaScript دون JSON أو أنابيب أو بيئة تشغيل ثانية. ويتم ذلك عبر التحويل: تتحول القيم العددية إلى بدائيات JS، وتُنسخ مصفوفات PHP إلى مصفوفات وكائنات JS جديدة، ثم تُنسخ نتائج JS مجددًا إلى مصفوفات PHP. ولا يظهر أي تغيير يجريه JS على مصفوفة محوّلة في مصفوفة PHP. أما الدوال القابلة للاستدعاء في PHP فهي الاستثناء الذي يظل حيًا: إذ تصبح دوال JS تستدعي PHP مباشرةً.

يتناول هذا القسم القواعد.

الصفحات

  • القيم — جداول التحويل في الاتجاهين: الأعداد والسلاسل والقيم المنطقية وnull/undefined والمصفوفات والكائنات والقيم التي لا يمكن تحويلها.
  • دوال المضيف — ربط PHP callable كدالة JS عبر $engine->setGlobal(). تحويل الوسائط والقيم المعادة وسلوك الاستثناءات.
  • الكائنات المشتركة — ما يحدث عند تمرير كائن PHP إلى JS حاليًا (يصل على هيئة undefined)، وكيفية إتاحة الحالة والسلوك PHP باستخدام المصفوفات والإغلاقات.
  • نقل Fetch — استبدال الواجهة الخلفية الافتراضية ext-curl HTTP بـ Guzzle أو Symfony HttpClient أو محاكاة أو خيار يمنع الكل. بالإضافة إلى خطاف السياسة لإعداد قائمة سماح وإضافة الترويسات والربط لكل مستأجر.
  • حاوية ملفات تعريف الارتباط — تركيب حاوية get(url)/set(url, header) للاحتفاظ بملفات تعريف الارتباط بين عمليات الجلب. ذاكرة داخلية أو Symfony BrowserKit أو Map من جهة JS.
  • أنماط AbortController — المهلة الزمنية والتسابق والنشر وAbortSignal.any / .timeout، وكيفية استطلاع نقل PHP مخصص للإشارة أثناء النقل.

مثال سريع

PHP
$engine = new Phasis\Engine();

// 1. Bind a PHP callable as a JS function
$engine->setGlobal('greet', fn (string $name) => "Hello, $name!");
echo $engine->eval('greet("world")');  // → Hello, world!

// 2. Let JS change PHP state through a closure
$total = 0;
$engine->setGlobal('add', function (int $n) use (&$total): void { $total += $n; });
$engine->eval('add(2); add(3)');
echo $total;  // → 5

// 3. Call a JS function from PHP
$engine->eval('function add(a, b) { return a + b; }');
echo $engine->call('add', 2, 3);  // → 5

راجع أيضًا

  • مرجع API — الواجهات الكاملة لـ Phasis\Engine.
  • واجهات Web API — تعمل حزمتا Web Platform Pack وFetch Pack فوق طبقة التشغيل البيني نفسها.