التعامل مع الأنواع في PHP

من موسوعة حسوب
< PHP

لا تطلب PHP (أو تدعم) التصريح عن نوع المتغير عند تعريفه، لأنه نوعه يُحدَّد حسب السياق الذي سيستخدم هذا المتغير فيه. وهذا يعني أنَّه إذا أُسنِدَت قيمة سلسلة نصية إلى المتغير ‎$var، فإن نوع المتغير سيكون سلسلة نصية، وإذا أُسنِد عددٌ صحيحٌ، فيصبح نوع المتغير عددًا صحيحًا.

ومثال ذلك، معامل الضرب *، إذا استعملناه على قيمتين وكانت إحدى تلك القيمتين عددًا عشريًا فستُعدّ كلا القيمتين على أنهما عددٌ عشريٌ، وكذلك ناتج تلك العملية، ولاحظ أن هذا لا يغير نوع العامل نفسه، بل يغير طريقة تقدير قيمة التعابير الحسابية.

<?php
$foo = "1";  // سلسلة نصية
$foo *= 2;   // عدد صحيح
$foo = $foo * 1.3;  // عدد عشري
$foo = 5 * "10 Little Piggies"; // عدد صحيح قيمته 50
$foo = 5 * "10 Small Pigs";     // عدد صحيح قيمته 50
?>

إذا بدا لك آخر مثالين في المثال السابق غريبين، فاطّلع على قسم تحويل السلاسل النصية إلى أعداد (String conversion to numbers).

لفرض تقدير قيمة المتغير بنوع معين، فاطّلع على قسم تحويل الأنواع (Type casting) أدناه، ولتغيير نوع المتغير، فانظر صفحة الدالة settype()‎.

لتجربة الأمثلة في هذا القسم، استخدم الدالة var_dump()‎.

ملاحظة: لم يتم تعريف سلوك تحويل المصفوفة حتى الآن.

بالإضافة إلى ذلك، لمّا كانت php تدعم الفهرسة في السلاسل النصية، يمكنك استخدام نفس صياغة فهرسة المصفوفة، فهذا المثال يعمل على جميع إصدارات PHP:

<?php
$a    = 'car'; // سلسلة نصية
$a[0] = 'b';   // ما تزال سلسلةً نصيةً
echo $a;       // bar
?>

راجع قسم الوصول إلى أحرف السلاسل النصية (String access by character) للمزيد من المعلومات.

تحويل الأنواع

يعمل تحويل الأنواع في PHP بنفس الطريقة المتبعة في لغة السي C، وهي وضع اسم النوع المطلوب يكتب بين قوسين قبل المتغير الذي يراد تحويله.

<?php
$foo = 10;   // عدد صحيح
$bar = (boolean) $foo;   // قيمة منطقية
?>

أنواع التحويل المسموح بها:

تمت إضافة دعم التحويل إلى القيم الثنائية (binary) إضافةً إلى البادئة b منذ الإصدار 5.2.1.

لاحظ أنه يُسمَح بالفراغات ومسافات الجدولة (tab) داخل الأقواس، وبالتالي يكون التعبيران الآتية مكافئين لبعضها بعضًا:

<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
?>

يمكن تحويل السلاسل النصية المحرفية والمتغيرات، إلى سلاسل نصية ثنائية بهذه الطريقة:

<?php
$binary = (binary) $string;
$binary = b"binary string";
?>

ملاحظة: بدلًا من تحويل متغير إلى سلسلة نصية، يمكن وضع المتغير ضمن علامات اقتباس مزدوجة:

<?php
$foo = 10;            // عدد صحيح
$str = "$foo";        // سلسلة نصية
$fst = (string) $foo; // سلسلة نصية أيضًا

"they are the same"
if ($fst === $str) {
    echo "they are the same";
}
?>

عند التحويل بين أنواعٍ معيّنة، فلا يمكنك معرفة ما الذي سيحدث تمامًا، للمزيد من المعلومات حول ذلك راجع الأقسام التالية:

مصادر