تغييرات النوع المتغير (شعوذة)
لا تتطلب PHP (أو لا تدعم) تحديد نوع المتغير الخاص بها في المتغير المُعلن؛ ويتم تحديد نوع المتغير من خلال السياق الذي يُستخدم فيه المتغير، أي إذا قمت بتعيين سلسلة لمتغير القيمة. من var يصبح متغير سلسلة. إذا قمت بتعيين عدد صحيح إلى var، فإنه يصبح متغيرًا صحيحًا.
مثال على قيام PHP بتحويل أنواع المتغيرات تلقائيًا هو عامل الإضافة "+". إذا كان أي معامل مزدوجًا، فسيتم تقييم جميع المعاملات على أنها مزدوجة، وتكون النتيجة أيضًا مزدوجة. وبخلاف ذلك، سيتم اعتبار المعاملات أعدادًا صحيحة وستكون النتيجة عددًا صحيحًا. لاحظ أن هذا لا يؤثر على نوع المتغير لكل معامل نفسه، والتغيير الوحيد هو كيفية معالجة المعاملات أثناء الحساب.
$foo = "0"; // $foo عبارة عن سلسلة بقيمة "0" (ASCII 48)
$foo++; // $foo عبارة عن سلسلة بقيمة "1" (ASCII 49)
$foo += 1; // $foo أصبح الآن عددًا صحيحًا (2)
$foo = $foo + 1.3; // $foo أصبح الآن عددًا مزدوجًا (3.3)
$foo = 5 + "10 Little Piggies"; (15)
$foo = 5 + "10 خنازير صغيرة"; // $foo عدد صحيح (15)
إذا كنت تعتقد أن التعبيرين الأخيرين في المثال أعلاه يبدوان غريبين بعض الشيء، فيرجى مراجعة قسم "تحويل السلسلة".
إذا كنت ترغب في فرض تقييم متغير كنوع ثابت، راجع قسم "التحويل". إذا كنت ترغب في تغيير نوع المتغير، يرجى الاطلاع على وصف الوظيفة "settype()".
تحديد نوع المتغير
نظرًا لأن PHP تحدد أنواع المتغيرات بنفسها وتقوم عمومًا بصياغتها حسب الحاجة، فإن نوع متغير معين ليس واضحًا دائمًا. يتضمن PHP وظائف لمعرفة نوع هذا المتغير. هذه الوظائف هي gettype() وis_long() وis_double() وis_string() وis_array() وis_object().
نوع الصب
إن إكراه النوع في PHP هو نفسه تقريبًا في لغة C: اكتب النوع المطلوب بين قوسين أمام المتغير المراد إكراهه.
$foo = 10; // $foo عدد صحيح
$bar = (double) $foo;
يُسمح باستخدام أساليب الإكراه التالية:
(int)، (عدد صحيح) - الإكراه على عدد صحيح
(حقيقي)، (مزدوج)، (تعويم) – الإكراه على المضاعفة
(سلسلة) - الإكراه على السلسلة
(مصفوفة) - الإكراه على المصفوفة
(كائن) - الإكراه على الاعتراض
لاحظ أنه مسموح بعلامات التبويب والمسافات بين قوسين، وبالتالي فإن العبارات التالية متكافئة:
$foo = (int) $bar;
$foo = (int) $bar;
تحويل السلسلة
عندما يتم تقييم سلسلة كقيمة رقمية، يتم تحديد نتيجتها ونوعها كما هو موضح أدناه.
إذا كانت هذه السلسلة تحتوي على الأحرف "."، أو "e"، أو "E"، فسيتم التعامل معها كمتغير مزدوج النوع، وإلا فسيتم التعامل معها على أنها عدد صحيح.
يتم تحديد قيمة هذه السلسلة بواسطة البادئة. إذا كانت السلسلة تبدأ بأي بيانات رقمية صالحة، فإن البيانات الرقمية هي القيمة التي يتم تقييم السلسلة بناءً عليها. وإلا فإن القيمة صفر. تتبع البيانات الرقمية الصالحة الترميز التالي، متبوعًا برقم واحد أو أكثر (قد يتضمن علامة عشرية)، متبوعًا بأس اختياري. يتكون الأس من رقم واحد أو أكثر متبوعًا بـ "e" أو "E".
$foo = 1 + "10.5"; // $foo مزدوج (11.5)
$foo = 1 + "-1.3e3"; // $foo مزدوج (-1299)
$foo = 1 + "bob -1.3 e3"; // $foo هو عدد صحيح (1)
$foo = 1 + "bob3"; // $foo هو عدد صحيح (1)
$foo = 1 + "10 خنازير صغيرة"; // $foo هو عدد صحيح ( 11)
$foo = 1 + "10 Little Piggies"; // $foo عدد صحيح (11)
;
لمزيد من المعلومات، راجع قسم دليل يونكس على strtod(3).