بسم الله الرحمن الرحيم
أولاً لا شكر على واجب ونفع الله الجميع بإذنه تعالى ... نتابع .
الآن لتوضيح فكرة بناء لغة برمجة تشبه php فأنت لن تضطر لشئ كبير وسأعطيك مثال يوضح لك كيف تعمل php من داخل لغة C .
وخير مثال للتوضيح هو محركات القوالب ؟ (هي ياذكي لاتتفلسف هذه لغة وهذا محرك قوالب ؟!! طيب لا تدف خليك معي لحظة)
شوف الآن سأتكلم قليلاً عن لغة C لكي تتضح الفكرة ..
فالبنسبة للغة C فهي تشبه في تركيبها اللغوي أومن حيث الكتابة تشبه php بنسبة 90 % وسأضرب مثالي هنا على أحد الأشياء الموجودة في لغة C وهي جملة for فهي تشبه إلى حدٍ ما for الموجودة في php ... وصيغتها في لغة C
كود PHP:
int a = 100;
int j;
for(j = 1; j <= a; j++)
printf("Hello, Swalif..!");
لاحظ معي الآن ...
هذه حلقة for بسيطة في لغة C لتطبع جملة Hello, Swalif ...
طيب مالحكمة من هذا ...؟
بما أن php مكتوبة على C ... فعندما تكتب أنت for على php فإنه في الحقيقة لا يتم توليد لغة ألة ولا لغة أسمبلي كما ذكرنا بل سيتم عمل for من داخل لغة C :app: وهكذا لـ ifو do..while و switch ...
كيف ذلك ؟
الآن لاحظ كود php التالي :-
كود PHP:
for($swalif = 0; $swalif < 100; $swalif++)
echo "Google";
مالذي يحدث هنا في الحقيقة ...
من داخل محرك Zend و من داخل لغة C تحديداً هناك نوع إسمه zval في محرك zend هذا النوع مخصص لمتغيرات php وهو يأخذ أي نوع وهذا المتغير variant أي أنه يشكل على نوع البيانات الذي تريده فمرة يكون float ومرة يكون double ومرة يكون object ومرة يكون array مرة string دون أي مشاكل لأنه ببساطة داخل هذا النوع توجد قيمة فإذا كانت 1 مثلاً فهو string و 2 فهو object وهكذا ..
واكبر دليل على كلامي هذا وعلى مصداقية هذا النوع عندما تكتب أي متغير في php فإنه بإمكانك أ تضعه integer في السطر الأول وتحول إلى مصفوفة في السطر الثاني المهم ....
نتابع المثال ...
سيقوم محرك zend بإنشاء متغير بإسم swalif من النوع zval داخل zend ويعينه على أن integer لأنه اخذ القيمة 0 بعد ذلك يشوف كم أقصى عدد للعداد ويرى أنه 100 وبعدها يرى مقدار الزيادة ويجد أنه بـ 1 فقط وبعد ذلك يرى الجمل الموجودة بداخل for ويولد الشفرة الموازية لها بلغة C ثم يستخدم for الموجودة في لغة C ويعطيك المخرجات كالتالي
كود PHP:
zval var = zend_ctor("swlaif",ZEND_INT,...);
int max = 100;
int step = 1;
for(var->ival = 0; var->ival < max; step++)
printf("Google);
وهذا بشكل مبسط ... لكي أوضح لك كيف يتم التوليد بشكل مبسط .. وهكذا لـ if و غيرها من جمل php ...
الآن بعد أن رأيت ذلك هنا سأرجع لموضوع محرك القوالب الأن أنت بإمكانك أن تقلب السحر على الساحر وعمل لغة Script بواسطة php وتسميها Swalif Script Language وذلك أن تؤلف الطريقة التي تكتب بها اللغة الخاصة بك وكل ماعليك أنت كمبرمج أن تقوم بتوليد الكود المطابق لها بواسطةphp و للتوضيح فأنا سأصنع لغة بإسم Swalif وسيكون الـ for فيها كالتالي :
كود PHP:
for i = 0 to 10 step 2
PRINT "Google"
وعندها كل ماعلي هو أن أقرأ هذا الكود وأنفذ الشفرة الموازية لهذا الكلام بواسطة php وهي ستكون
كود PHP:
for($i = 0 ; $i < 10 ; $i += 2)
echo "Google";
وهذا ما جاءت به محركات القوالب في الأصل :eek2: لذلك قامت المشاكل عندما جاءت فكرة محركات القوالب فقالوا لا نحتاج لها لأن Php نفسها هي محرك قوالب !!!!
طيب السؤال هنا إذا كانت php كما تقول يافالح فكيف تتعامل مع أشياء محسوسة مثل قواعد البيانات والـ Socket وغيرها من المكتبات وترينا نتائج مبهرة على ذلك ؟
الجواب : أبسط مما تتصور ..
في php ذكرنا في الأعلى أن المتغيرات التي تكتبها تتحول إلى نوع متغير في C بإسم zval إذاً
عندما تكتب أنت أي دالة مثل
كود PHP:
mysql_connect("localhost",$user,$pass);
فكل الحكاية أن php جابة مكتبة mysql المكتوبة على السي >>
وعندما تكتب أنت ذلك فسيقوم php بمقارنة إسم الدالة المطلوب ويستدعي الدالة المناسبة من خلال لغة C :eek2: يعني مثل الجدول إذا لقيت هذي أستدعي هذي وإذا لقيت هذي استدعي هذي وهكذا ... :funny:
وهذا بإختصار معنى كلمة Script عندما تجدها في لغات برمجة السكربتات وهي تعني (نص)
وأرجوا أن أكون وفقت في إيصال القليل على الأقل
وللبقية حوار ..
تحياتي
أخوكم عبدالله عيد