مقدمة: لماذا تمثل النصوص والأرقام في PHP دراما أبدية؟
\nتخيل أنك تكتب آلة حاسبة للشحن، والمستخدم يُدخل عدد المنتجات كنص "5". تحاول إضافة 10 — وتحصل على "510" بدلاً من 15. هل يبدو ذلك مألوفًا؟ مرحبًا بك في عالم تحويل الأنواع في PHP!
سؤال "How do I convert a string to a number in PHP?" هو من أكثر الأسئلة شيوعًا على Stack Overflow (أكثر من 2 مليون مشاهدة). وليس من دون سبب: تشتهر PHP بـ الكتابة الضمنية التي تسهل الحياة وتخلق الفخاخ في نفس الوقت.
\nفي هذا الدليل، سنستعرض 5 طرق موثوقة لتحويل النص إلى رقم، ونفضح الخرافات، ونتعلم كيف نتجنب الأخطاء البرمجية. هيا بنا!
\n\nالنظرية: ماذا يحدث تحت غطاء PHP؟
\nPHP هي لغة ذات كتابة ديناميكية. يمكن أن يكون المتغير نصًا، وبعد ثانية يصبح رقمًا. لكن هناك فارق بسيط:
\n- \n
- التحويل الضمني للأنواع — PHP تقرر بنفسها كيفية تفسير البيانات (وغالبًا ما تخطئ). \n
- التحويل الصريح للأنواع — أنت تتحكم في الأمر بنفسك. \n
عندما تكتب "5" + 10، تقوم PHP تلقائيًا بتحويل النص "5" إلى رقم. لكن جرب "5 تفاحات" + 10 — وستحصل على 15 (PHP تتجاهل "تفاحات" بصمت). أما "تفاحات 5" + 10 فسيعطيك 10 (يُعتبر النص صفرًا). فوضى؟ نعم. لكننا سننظم الأمور.
الطريقة 1: عامل تحويل النوع (int) و (float)
\nأسرع وأسهل طريقة هي استخدام التحويل الصريح (casting):
\n<?php\n$string = "42.8";\n$int = (int)$string; // 42 (الجزء الصحيح)\n$float = (float)$string; // 42.8\n\necho $int; // 42\necho $float; // 42.8\n?>\nمهم: (int) يتجاهل الجزء العشري دون تقريب. للتقريب، استخدم round() بعد التحويل.
متى تستخدم: عندما تكون متأكدًا أن النص يحتوي على رقم فقط، وتحتاج تحويلًا سريعًا.
\n\nالطريقة 2: الدالتان intval() و floatval()
\nهاتان هما "الأخوان الأكبران" للتحويل الصريح — أكثر قابلية للقراءة ومرونة:
\n<?php\n$string = "123.45abc";\n\n$int = intval($string); // 123\n$float = floatval($string); // 123.45\n\n// مع تحديد نظام العد (لـ intval فقط)\n$hexString = "1A";\n$hexInt = intval($hexString, 16); // 26 (تحويل النص السداسي عشري)\n\necho $int; // 123\necho $float; // 123.45\necho $hexInt; // 26\n?>\nالميزة: intval() يمكنها التعامل مع أنظمة العد المختلفة (ثنائي، ثماني، سداسي عشري). floatval() تتعامل فقط مع النظام العشري.
متى تستخدم: عندما تحتاج معالجة "القمامة" في نهاية النص أو العمل مع أنظمة عد غير قياسية.
\n\nالطريقة 3: الدالة settype() — تحويل مع إرجاع true/false
\nهل تريد ليس فقط التحويل، بل أيضًا التحقق من نجاح العملية؟ استخدم settype():
<?php\n$string = "99.9";\n$result = settype($string, "float"); // true\n\necho $string; // 99.9 (الآن أصبح float)\necho $result; // 1 (true)\n\n// إذا كان النص غير رقمي\n$badString = "hello";\n$result = settype($badString, "integer"); // false\n\necho $badString; // 0 (تم تحويله إلى صفر)\necho $result; // (فارغ، false)\n?>\nمهم: settype() تغير المتغير نفسه، ولا تُرجع قيمة جديدة. مفيدة عندما تحتاج ضمان تغيير النوع.
متى تستخدم: عندما تحتاج التحقق من نجاح التحويل (مثلًا في إدخال المستخدم).
\n\nالطريقة 4: الحيل الحسابية (ولماذا من الأفضل عدم استخدامها)
\nنعم، يمكنك كتابة $number = $string + 0 — PHP ستقوم بتحويل النص إلى رقم بنفسها. أو $number = $st