Menu
flag Ar iconالعربيةdown icon

أنواع البيانات في PHP: int وfloat وstring وbool وarray وnull

في PHP عشرة أنواع: أربعة بسيطة (int وfloat وstring وbool)، وأربعة مركبة (array وobject وcallable وiterable)، ونوعان خاصان (null وresource). تعرض var_dump($x) نوع القيمة وقيمتها، وتعيد gettype($x) اسم النوع.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

في PHP ثمانية أنواع تستخدمها يوميًا: int وfloat وstring وbool وarray وobject وnull، إضافة إلى callable للدوال التي تمررها. ليس للمتغير نوع ثابت، بل لقيمته الحالية. تعرض var_dump($x) النوع والقيمة معًا، وتعيد gettype($x) النوع كنص.

العمود الأول هو gettype()، والثاني get_debug_type(). استبدل قيمة بقيمة من عندك وشغّل الكود مرة أخرى. يختلفان في بعض الأسماء: تقول gettype integer وdouble وboolean لأسباب تاريخية، بينما تستخدم get_debug_type أسماء تصريحات الأنواع (int وfloat وbool) وتعطي اسم الصنف للكائن.

أنواع PHP في لمحة

النوعمثالملاحظات
int42, -7, 0x1A, 1_000_000أعداد صحيحة، 64 بت على الأنظمة الحديثة
float3.14, 1.5e3أعداد عشرية، غير دقيقة كما في كل اللغات
string"hi", 'hi'سلسلة من البايتات، لا من المحارف
booltrue, falseغير حساس لحالة الأحرف (TRUE يعمل أيضًا)
array[1, 2], ["a" => 1]خريطة مرتبة: قائمة وقاموس في نوع واحد
objectnew User(), new stdClass()نسخة من صنف
nullnullالقيمة الوحيدة من النوع null، وتعني أيضًا «لم تُعيَّن قيمة»
callable'strlen', fn($x) => $x * 2أي شيء يمكن استدعاؤه
iterableمصفوفة أو كائن Traversableما تقبله foreach
resourceنتيجة fopen()مقبض لشيء خارج PHP

فحص القيم باستخدام var_dump

var_dump هي الأداة لرؤية ما لديك فعلًا. تطبع النوع والقيمة، وللنصوص طولها بالبايت:

كانت echo ستطبع 10 للثلاثة الأولى وتخفي الفرق. الطول في string(5) "café" يعدّ البايتات، ولهذا تختلف strlen وmb_strlen في النصوص غير اللاتينية.

الأعداد الصحيحة والعشرية

العدد الصحيح عدد بلا كسور. يمكن أن تستخدم القيم الحرفية الشرطات السفلية لتسهيل القراءة، والصيغ الست عشرية والثمانية والثنائية. والعدد العشري هو أي عدد فيه فاصلة عشرية أو أُس، وكما في كل اللغات يخزّن معظم الكسور العشرية بشكل تقريبي:

لا تقارن الأعداد العشرية بـ == أبدًا، بل قارن الفرق بهامش صغير، أو قرّب الطرفين أولًا. وللمبالغ المالية، خزّن السنتات الكاملة كأعداد صحيحة.

القيم المنطقية وأي القيم تُعد false

قيمة bool هي true أو false. حيث تتوقع PHP شرطًا (if وwhile و!)، تُحوَّل أي قيمة إلى bool، وتُعد قائمة قصيرة من القيم false: false و0 و0.0 و"" و"0" و[] وnull. وكل ما عداها true. يعرض الجدول كل قيمة مع نوعها وتحويلها إلى bool وما إذا كانت رقمية:

gettype و(bool) وis_numeric لكل قيمة من قيم $x
Point at or tap a cell to read it as PHP.
$xgettypeboolis_numeric
0
1
-1
0.0
1.5
"0"
""
" "
"0.0"
"10"
"1e1"
"abc"
"null"
true
false
null
[]
[0]
Every cell computed by PHP 8.3.19.

المفاجآت هي "0.0" و" " و"null": الثلاثة نصوص غير فارغة وليست "0"، لذا فهي true، وتنفّذ if ($value) جسمها معها.

المصفوفات والكائنات وnull

تحمل المصفوفة أي مزيج من القيم تحت مفاتيح صحيحة أو نصية. والكائن نسخة من صنف، وstdClass هو الصنف الفارغ في PHP للكائنات السريعة، و(object) يحوّل مصفوفة إلى كائن منه. وتعني null «لا قيمة»:

فحص النوع بدوال is_*

لكل نوع دالة اختبار تعيد true أو false. تختلف is_numeric عن is_int: فهي تقبل النصوص الرقمية أيضًا، وهذا ما تريده عند فحص مدخلات النماذج.

ودوال أخرى: is_bool وis_array وis_object وis_null وis_callable وis_iterable، و$x instanceof ClassName لصنف محدد.

التحويل التلقائي للأنواع والأنواع الصارمة

تحوّل PHP الأنواع تلقائيًا عندما يحتاج عامل إلى نوع آخر. النص الرقمي المستخدم في الحساب يصبح عددًا، و. تحوّل الأعداد إلى نصوص. أما النص غير الرقمي إطلاقًا فلا يمكن جمعه، وتطلق PHP 8 الخطأ TypeError:

والمعاملات ذات الأنواع تُحوَّل أيضًا، ما لم يبدأ الملف بـ declare(strict_types=1);. عندها يفشل الاستدعاء بنوع بسيط خاطئ بدلًا من تحويله:

للتحويل المقصود، استخدم التحويل الصريح: (int) "42" و(float) "3.5" و(string) 10 و(bool) "0". تشرح صفحة تحويل الأنواع كل تحويل وحالاته الخاصة.

خطأ شائع: مقارنة أنواع مختلفة بـ ==

لأن == تحوّل قبل المقارنة، قد تكون قيمتان من نوعين مختلفين «متساويتين» بطرق تسبب أخطاء، مثل "1e1" == "10" (كلاهما العدد 10) أو null == false. استخدم ===، التي تشترط النوع نفسه أيضًا، ما لم ترد التحويل:

أصلحت PHP 8 أسوأ حالة: كانت "abc" == 0 تساوي true وأصبحت الآن false، لأن النص غير الرقمي يُقارن كنص. الجداول الكاملة في صفحة عوامل المقارنة.

الأسئلة الشائعة

كيف أتحقق من نوع متغير في PHP؟

تطبع var_dump($x) النوع والقيمة، مثل int(5). وتعيد gettype($x) اسم النوع كنص ("integer")، وتعيد get_debug_type($x) الاسم الحديث ("int"، أو اسم الصنف للكائنات). ولاختبار نوع واحد، استخدم is_int وis_string وis_array وبقية دوال is_*.

لماذا تعيد gettype القيمة "double" للعدد العشري؟

لأسباب تاريخية تُبلغ gettype() عن الأعداد العشرية بالاسم "double" وعن الأعداد الصحيحة بالاسم "integer". أما get_debug_type()، المضافة في PHP 8، فتعيد "float" و"int"، وهي الأسماء نفسها التي تكتبها في تصريحات الأنواع.

ما القيم التي تُعد false في PHP؟

عند التحويل إلى bool، تكون هذه القيم false: false و0 و0.0 و"" و"0" و[] وnull. وكل ما عداها true، بما في ذلك "0.0" و" " و"false".

ما أكبر عدد صحيح في PHP؟

PHP_INT_MAX، وهو 9223372036854775807 على الأنظمة 64 بت. وتجاوزه بالجمع لا يعيد الدوران إلى البداية: تصبح النتيجة عددًا عشريًا وتفقد الدقة.

هل PHP قوية الأنواع أم ضعيفتها؟

PHP ديناميكية الأنواع، وتحوّل الأنواع افتراضيًا عندما تستطيع ("10" + 5 تساوي 15). ومع declare(strict_types=1); في أعلى الملف، ترفض استدعاءات الدوال ذات الأنواع في ذلك الملف الأنواع البسيطة الخاطئة بخطأ TypeError بدلًا من تحويلها.

رسم توضيحي للغات البرمجة في Coddy

تعلّم البرمجة مع Coddy

ابدأ الآن