التبديل بين الأنواع وتحويلها
افهموا كيفية تحويل PHP الأنواع تلقائيًا، وكيفية تحويلها يدويًا.
التبديل بين الأنواع وتحويلها درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.
ما التبديل التلقائي للنوع؟
يعني التبديل التلقائي للنوع أن PHP تحوّل نوع القيمة تلقائيًا عندما يتطلب عامل أو دالة نوعًا مختلفًا.
هذا مريح، لكنه قد يؤدي إلى أخطاء دقيقة إذا لم تفهم القواعد.
التحويل التلقائي للأنواع في العمليات الحسابية
تحوّل PHP السلاسل النصية إلى أرقام عند استخدامها في سياق العمليات الحسابية:
<?php
echo '5' + 3; // 8 — string '5' becomes int 5
echo '5.5' + 1.5; // 7 — string '5.5' becomes float
echo '5 cats' + 1; // 6 — leading numeric part used, rest ignored
echo 'cats' + 1; // 1 — non-numeric string becomes 0المقارنة غير الصارمة ==
يقارن العامل == القيم بعد التحويل التلقائي للأنواع — وقد يؤدي ذلك إلى نتائج مفاجئة:
<?php
var_dump(0 == 'a'); // true in PHP 7 (both become 0)
// false in PHP 8 (improved rules!)
var_dump('' == false); // true
var_dump('1' == true); // true
var_dump(null == false); // trueالمقارنة الصارمة ===
استخدم دائمًا === لمقارنة كل من القيمة والنوع — إذ لا يحدث أي تحويل تلقائي للأنواع:
<?php
var_dump(1 === '1'); // false — different types
var_dump(1 === 1); // true
var_dump(null === false); // false
var_dump(0 === false); // false
// Rule of thumb: prefer === unless you explicitly need type coercionالتحويل الصريح للنوع
حوّل قيمة إلى نوع محدد بإضافة (type) في بدايتها:
<?php
$str = '42.7';
$int = (int) $str; // 42
$float = (float) $str; // 42.7
$bool = (bool) $str; // true
$arr = (array) $str; // ['42.7']
echo $int; // 42
echo $float; // 42.7الدالة settype()
تغيّر settype() نوع المتغير مباشرةً، وتعيد true أو false:
<?php
$value = '123';
settype($value, 'integer');
var_dump($value); // int(123)
// Alternative: intval(), floatval(), strval() functions
$n = intval('0xFF', 16); // 255 — parse hex stringحالات خاصة عند تحويل السلاسل إلى أرقام
القواعد الأساسية عند تحويل PHP للسلاسل النصية إلى أرقام:
- يتم تجاهل المسافات البيضاء في البداية:
' 42 '→ 42 - بادئة غير رقمية:
'php8'→ 0 (إشعار في PHP 8) - الترميز العلمي:
'1e3'→ 1000.0 - السلاسل السداسية عشرية: لا تُحوَّل
'0x1A'تلقائيًا إلى int في PHP 7 والإصدارات الأحدث
قواعد التحويل إلى Boolean
تُحوَّل هذه القيم إلى false؛ وكل ما عداها يُحوَّل إلى true:
<?php
$falsy = [false, 0, 0.0, '', '0', [], null];
foreach ($falsy as $v) {
var_dump((bool) $v); // all bool(false)
}
// Careful:
var_dump((bool) '0'); // false — the STRING '0' is falsy!
var_dump((bool) '00'); // true — only exactly '0' is falsyاستخدام intval() مع الأساسات
تقبل intval() معاملًا اختياريًا للأساس لتحليل السلاسل الرقمية:
<?php
echo intval('0b1010', 2); // 10 — binary
echo intval('077', 8); // 63 — octal
echo intval('1F', 16); // 31 — hexadecimal
echo intval('42'); // 42 — decimal (default base 10)تحسينات تحويل الأنواع في PHP 8
أصلحت PHP 8 بعض حالات تحويل الأنواع غير المتسقة في الإصدارات السابقة:
- أصبحت
0 == 'foo'الآنfalse(بعد أن كانتtrueفي PHP 7) - عند مقارنة الأرقام بسلاسل غير رقمية، لم تعد السلسلة تُحوَّل إلى 0
- يجعل ذلك PHP 8 أكثر أمانًا، لكنه قد يتسبب في تعطل الشيفرة القديمة التي تعتمد على السلوك السابق
تجنب أخطاء تحويل الأنواع
أفضل الممارسات لتجنب المفاجآت الناتجة عن تحويل الأنواع:
<?php
declare(strict_types=1); // enforce types at function boundaries
// Always use === for comparisons
if ($status === 'active') { /* safe */ }
// Cast explicitly before arithmetic
$total = (float) $_POST['price'] * (int) $_POST['qty'];
// Validate with filter_var
$age = filter_var($_POST['age'], FILTER_VALIDATE_INT);
if ($age === false) { /* invalid input */ }تحقق سريع
ما قيمة التعبير (int) '42abc' في PHP؟
مراجعة: تحويل الأنواع
ما تعلمته عن معالجة PHP للأنواع:
- تحوّل PHP الأنواع تلقائيًا أثناء العمليات — وهذا هو تحويل الأنواع التلقائي
- تقارن
==بعد التحويل التلقائي؛ أما===فهي صارمة (النوع + القيمة) - أجرِ التحويل صراحةً باستخدام
(int)و(float)و(string)و(bool) - استخدم
intval()وfloatval()وstrval()كبدائل تعتمد على الدوال - حسّنت PHP 8 بعض الحالات الخاصة المتعلقة بتحويل الأنواع
- فعّل
strict_types=1لتقليل المفاجآت في شيفرتك
الأسئلة الشائعة
هل درس «التبديل بين الأنواع وتحويلها» مجاني؟
نعم — نص درس «التبديل بين الأنواع وتحويلها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.
ماذا ستتعلم في «التبديل بين الأنواع وتحويلها»؟
افهموا كيفية تحويل PHP الأنواع تلقائيًا، وكيفية تحويلها يدويًا. تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟
لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «التبديل بين الأنواع وتحويلها»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟
نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تعريف المتغيرات في PHP
- نظرة عامة على أنواع بيانات PHP
- إخراج البيانات باستخدام Echo وPrint
- التبديل بين الأنواع وتحويلها