تطبع print_r($array) مصفوفة أو كائنًا بمفاتيحه وقيمه بشكل مقروء. وتطبع var_dump($value) البنية نفسها مع نوع كل قيمة وطولها. استخدم print_r لترى ما في مصفوفة، وvar_dump عندما تحتاج إلى معرفة ما إذا كانت القيمة "1" أم 1.
قارن المخرجين لـ admin: لم تطبع print_r شيئًا بعد السهم، وطبعت var_dump القيمة bool(false). وهذا الفرق هو السبب الرئيسي لاستخدام var_dump أثناء تصحيح الأخطاء.
print_r مقابل var_dump مقابل var_export
تعرض الدوال الثلاث البيانات نفسها بتفاصيل مختلفة:
print_r | var_dump | var_export | |
|---|---|---|---|
| تعرض الأنواع | لا | نعم | على شكل قيم PHP حرفية |
false وnull و"" | لا تطبع شيئًا | bool(false) وNULL وstring(0) "" | false وNULL و'' |
| تستطيع إعادة نص | print_r($x, true) | لا | var_export($x, true) |
| المخرجات PHP صالحة | لا | لا | نعم |
| عدة قيم في استدعاء واحد | لا | var_dump($a, $b) | لا |
print_r أسهلها قراءة، وvar_dump أدقها، وvar_export تعطيك شيفرة تستطيع لصقها مرة أخرى في ملف.
الحصول على مخرجات print_r نصًا
مرّر true وسيطًا ثانيًا فتعيد print_r النص بدل طباعته. وهكذا تكتب مصفوفة في ملف سجل أو تضعها داخل رسالة أكبر.
تعيد var_export($value, true) نصًا بالطريقة نفسها. أما var_dump فتطبع دائمًا، لذا لالتقاط مخرجاتها تحتاج إلى التخزين المؤقت للمخرجات: ob_start(); var_dump($x); $text = ob_get_clean();.
طباعة مصفوفة منسقة في HTML بـ pre
في المتصفح، تنهار فواصل الأسطر والمسافات في print_r إلى سطر طويل واحد، لأن HTML يتجاهل المسافات البيضاء. ضع المخرجات داخل <pre> لتحتفظ بالتخطيط. شغّل هذا وانظر إلى تبويب Page.
تصبح htmlspecialchars مهمة حالما قد تحتوي البيانات < أو &، مثل مُدخلات المستخدم: دونها سيعامل المتصفح ذلك النص على أنه HTML. وللبيانات التي ترسلها إلى JavaScript أو إلى واجهة برمجية، كثيرًا ما تكون صيغة json_encode الأنفع.
عرض عدة قيم معًا
تقبل var_dump أي عدد من الوسائط وتطبع كلًّا منها بالدور، وهذا سريع لمقارنة قيمتين جنبًا إلى جنب.
تبيّن المخرجات لماذا تقول == إنهما متساويتان ولا تقول === ذلك: إحداهما string(2) "42"، والأخرى int(42).
طباعة الكائنات
تطبع الدوال الثلاث الكائنات أيضًا. وتعلّم var_dump وprint_r الخصائص الخاصة والمحمية ([label:Point:private])، وهذا يساعد حين تبدو خاصية مفقودة.
#1 في مخرجات var_dump هو معرّف الكائن. والمتغيران اللذان يعرضان المعرّف نفسه يشيران إلى الكائن نفسه.
خطأ شائع: echo على مصفوفة
تحوّل echo وسيطها إلى نص. وليس للمصفوفة صيغة نصية، فتطبع PHP الكلمة Array وتطلق تحذيرًا:
<?php
$colors = ["red", "green", "blue"];
echo $colors;
تطبع PHP:
Warning: Array to string conversion in /home/index.php on line 3
Array
اطبع المحتويات بإحدى الدوال أعلاه، أو اضمم القيم بنفسك:
implode لعرض قائمة على مستخدم، وjson_encode للسجلات والواجهات البرمجية، وprint_r أو var_dump لتصحيح أخطائك.
الأسئلة الشائعة
ما الفرق بين var_dump وprint_r؟
تعرض print_r المفاتيح والقيم بشكل قصير ومقروء. وتعرض var_dump أيضًا نوع كل قيمة وطولها، مثل string(3) "Ada" وbool(false)، لذا فهي التي تستخدمها حين يهم النوع. لا تطبع print_r(false) شيئًا أبدًا، بينما تطبع var_dump(false) القيمة bool(false).
كيف أحصل على مخرجات print_r نصًا؟
مرّر true وسيطًا ثانيًا: تعيد $text = print_r($array, true); النص بدل طباعته، فيمكنك كتابته في سجل بـ error_log($text) أو وضعه في متغير. وتعمل var_export($value, true) بالطريقة نفسها؛ أما var_dump فليس لها مثل هذا الخيار.
كيف أطبع مصفوفة بشكل جميل في المتصفح؟
ضع المخرجات داخل وسم <pre> ليحتفظ المتصفح بفواصل الأسطر والإزاحة: echo '<pre>' . print_r($array, true) . '</pre>';. هرّبها بـ htmlspecialchars إذا كانت البيانات قد تحتوي HTML.
لماذا تطبع echo على مصفوفة الكلمة Array؟
تحوّل echo وسيطها إلى نص، والمصفوفة تتحول إلى الكلمة Array مع التحذير "Array to string conversion". استخدم print_r أو var_dump أو implode(', ', $arr) أو json_encode($arr) لطباعة المحتويات.
ماذا تفعل var_export في PHP؟
تطبع قيمة شيفرةَ PHP صالحة، مثل array ( 0 => 'a', )، يمكنك لصقها مرة أخرى في سكربت. ومع true وسيطًا ثانيًا تعيد الشيفرة نصًا، وهكذا تكتب بعض الأدوات ملفات الإعدادات المخزنة مؤقتًا.