محتويات الدورة

PHP / أساسي: القيم وأسس الطلب / الدرس 4

الدوال والنطاق والتقاط الإغلاق

اكتب حسابات بمعاملات ونتائج صريحة ثم تتبع الحالة الملتقطة. ميّز الدوال والأسهم والالتقاط بالقيمة والمراجع المقصودة.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تعريف عقود مدخل ومخرج منمطة.
  • شرح النطاق المحلي والتقاط الإغلاق.
  • إبقاء الآثار ونتائج الخطأ صريحة.

تعبر الدالة عن مسؤولية صغيرة

يقبل حاسب السعر سنتات وعدداً صالحاً ويعيد سنتات دون قراءة عام أو تحليل طلب أو طباعة HTML؛ يملك المستدعي الحدود. توضح التصريحات العقد الضيق لا المجال والتقريب. أضف تحقق المجال عند الحد العام وميّز الصفر الصالح من الفشل. تسهل الدوال إعادة الاستخدام في CLI ومحولات HTTP دون حالة خادم داخل الحساب.

php حساب منمط بفحص مجال منفصل
<?php
declare(strict_types=1);
function totalCents(int $price, int $count): int {
    if ($price < 0 || $count < 0) { throw new InvalidArgumentException("negative input"); }
    return $price * $count;
}
echo totalCents(125, 4), PHP_EOL;
try { totalCents(-1, 2); } catch (InvalidArgumentException $error) { echo $error->getMessage(), PHP_EOL; }
الناتج المتوقع
500
negative input

تقيد التصريحات الأنواع ويرفض الفرع السالب؛ وتحتاج النماذج الفعلية حدود الفيض والتقريب.

المتغيرات المحلية ليست اعتماداً عاماً ضمنياً

لا يستورد نطاق الدالة متغير الملف تلقائياً. مرر البيانات بدلاً من global. للثوابت والأعضاء والعامات الفائقة قواعدها، لكن قراءة الطلب داخل الحساب تربطه بالبيئة. تعبر الافتراضات عن قيم مستقرة لا قرارات إلزامية غائبة. تحسن المعاملات المسماة القراءة لكن أسماء المعاملات العامة تصبح عقداً للمستدعي؛ فغيرها بحذر وافهم ترتيب المسماة والموضعية.

التقاط قيمة أو مرجع عمداً

تستورد الدالة المجهولة المتغيرات بـuse. يلاحظ الالتقاط بالقيمة قيمة وقت الإنشاء، ويرى المرجعي التغيير اللاحق. تلتقط الأسهم الخارج المستخدم بالقيمة تلقائياً، وقد تصل مقابض الكائن فيه إلى متغير؛ فلا تسمه لقطة عميقة عامة. يستخدم المثال صحيحاً لتوضيح الفرق. قرر للعمل المؤجل هل تريد المسلم أم الأحدث ثم طابق الالتقاط.

php التقاط السهم ومرجع حي صريح
<?php
declare(strict_types=1);
$rate = 5;
$snapshot = fn(int $amount): int => $amount + $rate;
$live = function (int $amount) use (&$rate): int { return $amount + $rate; };
$rate = 10;
echo $snapshot(100), " ", $live(100), PHP_EOL;
الناتج المتوقع
105 110

يحتفظ السهم بالخمسة ويصير المرجع عشرة؛ ويتطلب الاختيار تحديد وقت الملاحظة.

للقابل للاستدعاء التزامات توقيت وإرجاع

تعمل دالة array_map أثناء العملية وعليها إرجاع التحويل؛ فالاستدعاء الراجع ليس غير متزامن تلقائياً. اختر اسماً لإعادة الاستخدام وإغلاقاً صغيراً للسياق. لا تطبع داخل تحويل بيانات فقد يخرج النص قبل الترويسات. تجعل المعاملات المرجعية التعديل جزءاً من العقد فوثقه ولا تستخدمه لتجنب return. أعد كائناً أو مصفوفة لمعان متعددة واضحة.

جعل الملكية والإخفاق قابلين للمراجعة

يفيد تدفق الفك والتحقق والحساب والعرض؛ تملك كل دالة حداً وتبلغ الفشل بلا بديل يشبه النجاح. احقن الوقت والموارد المؤثرة لتكون الاختبارات حتمية. قد يطيل الإغلاق عمر استجابة أو مورد كبير؛ فالتقط اللازم وحرر الدوال بانتهاء مالكها. اختبر النتيجة والرفض لا الاستدعاء فقط؛ ولا تفيد الواجهة الصغيرة دون افتراضات واضحة.

الأخطاء الشائعة وإصلاحها

اعتماد الحساب على عام خفي

لماذا يحدث؟
خفاء ملكية المدخل في الحالة المحيطة.
كيف تصلحه؟
تمرير القيمة الصالحة معاملاً.
كيف تتجنب تكراره؟
اختبار مدخلات صريحة مستقلة.

قراءة الإغلاق قيمة لاحقة مفاجئة

لماذا يحدث؟
استخدام مرجع عند قصد لقطة.
كيف تصلحه؟
التقاط القيمة أو نسخ البيانات اللازمة عمداً.
كيف تتجنب تكراره؟
تحديد الملاحظة عند الإنشاء أم الاستدعاء.

إرسال مساعد بيانات إخراجاً مفاجئاً

لماذا يحدث؟
خلط الطباعة والإرجاع في العقد.
كيف تصلحه؟
إرجاع البيانات والعرض عند حد الاستجابة.
كيف تتجنب تكراره؟
رصد الإخراج في اختبار المساعدات.

اختبر فهمك

1. يجب أن يحفظ الإغلاق الخصم المسلم رغم تغير النموذج. كيف يلتقطه؟

اعرض الحل المشروح

تحقق من القيمة الأولية والتقطها بالقيمة أو مررها صراحة. لا تلتقط حاوية الطلب المتغيرة مرجعياً. وللكائنات حدد النسخ؛ فقد يصل المقبض المنسوخ إلى الكائن نفسه.

2. لماذا تفصل حاسب الإجمالي من عارض HTML؟

اعرض الحل المشروح

يختبر الحساب بسنتات دقيقة دون طلب أو إخراج، ويملك العارض التهريب والتقديم. يمنع ذلك فساد الترويسات بطباعة مساعد ويتيح القاعدة لفحص CLI أو API.

أهم ما تعلمته

  • استخدم معاملات صريحة ودلالات التقاط مقصودة.
  • إرجاع البيانات وإرسال الاستجابة مسؤوليتان مختلفتان.

المراجع الرسمية