PHP / أساسي: القيم وأسس الطلب / الدرس 1
تنفيذ PHP والقيم وحدود بيئة التشغيل
افهم تشغيل برنامج PHP قبل ربطه بطلب ويب. استخدم صياغة PHP 8.3 أساساً وميّز بيئة CLI المختبرة بإصدار 8.5 من عملية خادم الويب.
في هذه الصفحة
أهداف الدرس
- فصل تنفيذ CLI من معالجة HTTP.
- تمييز القيم والمتغيرات والتحويل الصريح.
- تحديد افتراضات الإصدار والامتدادات.
لغة واحدة وواجهات تنفيذ متعددة
تعمل PHP كبرنامج أوامر أو ضمن واجهة خادم تعالج HTTP. تشترك قواعد اللغة وتختلف المدخلات والإخراج والامتدادات وعمر العملية. ليست وسيطة CLI قيمة نموذج تلقائياً ولا يثبت echo في الطرفية ترويسة متصفح. تعتمد الدورة صياغة متوافقة مع 8.3 إلا حيث يوسم الأحدث. فُحصت البرامج الكاملة في CLI بإصدار 8.5.12 دون ادعاء اختبار كل فرع مدعوم أو تطبيق إنتاج مضبوط.
للقيم أنواع وتوضح الأسماء القصد
تشمل القيم الصحيح والعائم والنص والمنطقي والمصفوفة والكائن وnull وموارد واجهات معينة. يبدأ الاسم بعلامة الدولار وقد يشير لاحقاً إلى قيمة أخرى، لكن تبديل النوع غير اللازم يعقد الفهم. توضح quantityText وquantity حد التحليل. يبقى النص الشبيه بالعدد نصاً حتى التحويل أو تطبيق قواعد عامل. تستخدم أمثلة المال وحدات صحيحة صغرى لتجنب خلط العائم الثنائي بسياسة تقريب مالية كاملة.
<?php
declare(strict_types=1);
$quantityText = "3";
$quantity = (int) $quantityText;
$unitCents = 250;
echo get_debug_type($quantityText), " ", get_debug_type($quantity), PHP_EOL;
echo $quantity * $unitCents, PHP_EOL;
string int
750
يوضح التحويل فقط؛ ويلزم رفض الكمية المشوهة أو الخارجة عن المجال قبل استخدامها.
لا تتحقق strict_types من الطلب
تؤثر declare(strict_types=1) في معالجة الأنواع العددية الأولية عند حدود الاستدعاء المعنية في الملف. لا تحول كل مدخل خارجي لقيمة مجال صالحة ولا تجعل PHP لغة ساكنة. يحتاج معامل الطلب النصي تحليلاً والمصفوفة فحص حقول. للدوال الداخلية والحالات الخاصة قواعد موثقة. فضّل العقد الصريح على افتراض أن التوجيه يلغي الغموض. تحمي الدالة حدها ويبقى المستدعي مسؤولاً عن الغائب والمشوه والتنسيق المحلي.
يختلف الإسناد للمصفوفات والكائنات
للمصفوفات دلالات قيمة وتحسينات مثل النسخ عند الكتابة، بينما ينسخ إسناد الكائن مقبض الكائن نفسه. يظهر تعديله عبر مقبض آخر. وقد تشترك مصفوفة منسوخة في كائناتها المتداخلة. وتضيف مراجع & آلية ربط أخرى يجب قصدها. وضح الملكية قبل تعديل مسودة؛ فلا يعزل الإسناد كل كائن متداخل أو مورد خارجي تلقائياً.
<?php
declare(strict_types=1);
$original = ["seats" => 2];
$draft = $original;
$draft["seats"] = 1;
$object = (object) ["seats" => 2];
$alias = $object;
$alias->seats = 1;
echo $original["seats"], " ", $draft["seats"], PHP_EOL;
echo $object->seats, PHP_EOL;
2 1
1
تنفصل المصفوفتان عند التعديل ويبقى متغيرا الكائن مشتركين في هويته.
توثيق البيئة دون كشف الإعداد الخاص
استخدم php -v وفحص امتداد محدد محلياً بدلاً من نشر phpinfo كاملة. غياب مشغل PDO مشكلة قدرة لا صياغة بالضرورة. اجعل المثال مكتفياً واستخدم التخزين المؤقت أو sqlite::memory: فقط. لا تنسخ DSN تطبيق مضبوط للتعلم. وثّق البيئة والامتداد والمتوقع. دعم الإصدار حقيقة متغيرة؛ راجع الجدول الرسمي للترقية ولا تعتبر أساس الدورة توصية نشر.
الأخطاء الشائعة وإصلاحها
اعتبار طباعة CLI اختبار HTTP
- لماذا يحدث؟
- إغفال اختلاف واجهة التنفيذ.
- كيف تصلحه؟
- وسم دليل CLI وفحص HTTP منفصلاً بمعزل.
- كيف تتجنب تكراره؟
- تحديد قنوات المدخل والإخراج لكل مثال.
قبول التحويل الصحيح كتحقق
- لماذا يحدث؟
- تحول النص المشوه إلى عدد مضلل.
- كيف تصلحه؟
- فحص الصيغة والمجال قبل الحساب.
- كيف تتجنب تكراره؟
- اختبار الغائب والفارغ والمشوه والحدود.
تعديل المسودة كائناً في موضع آخر
- لماذا يحدث؟
- الخلط بين مشاركة المقبض والنسخ العميق.
- كيف تصلحه؟
- تحديد الملكية ونسخ البنية اللازمة عمداً.
- كيف تتجنب تكراره؟
- مراجعة المتداخل والمراجع الصريحة عند التحديث.
اختبر فهمك
1. ماذا تضيف strict_types وماذا لا تثبت؟
اعرض الحل المشروح
تغير معالجة المعاملات الأولية في الاستدعاءات المعنية من الملف، ولا تفحص مخطط الطلب أو حدود الكمية أو الإخراج أو الصلاحية. اجعل الحدود صريحة واختبرها مستقلاً ببيانات مصطنعة.
2. يتطلب المثال PDO SQLite. كيف تعزله؟
اعرض الحل المشروح
افحص المشغل المحلي وأنشئ PDO("sqlite::memory:") وبيانات مصطنعة داخل المثال دون إعداد التطبيق. وثّق الإصدار والمشغل؛ فلا يثبت النجاح سلوك محرك آخر.
أهم ما تعلمته
- افصل قواعد اللغة من افتراضات البيئة والنشر.
- الأنواع والتحليل والملكية عقود مختلفة.