تكرار السؤال: …
الإجابة المختصرة
Type Juggling يقوم بتحويل الأنواع ضمنياً وبشكل تلقائي، بينما strict_types يفرض مطابقة دقيقة للأنواع في المعاملات والقيم المعادة ويرمي TypeError عند عدم التطابق.
الشرح
افتراضياً في PHP، إذا كانت الدالة تتوقع int ومررت النص '42'، ستقوم اللغة بتحويله ضمنياً. عند وضع declare(strict_types=1) في السطر الأول من الملف، تُلغى التحويلات الضمنية للملف المستدعي، ويرمي المحرك TypeError فوراً، مما يمنع الأخطاء الخفية ويحسن أمان واستقرار الكود.
مثال بالكود
<?php
declare(strict_types=1);
function add(int $a, int $b): int {
return $a + $b;
}
add(5, 10); // صحيح
// add("5", 10); // يرمي Fatal TypeErrorأخطاء شائعة
- الاعتقاد بأن declare(strict_types=1) يؤثر على كامل المشروع بمجرد وضعه في ملف واحد؛ هو يؤثر حصراً على الملف المكتوب فيه.