من المفيد لبناء برنامج PHP ديناميكي وتفاعلي أن تحصل على خرج من المتغيرات وقيمتها، توفر PHP عدة توابع لعرض قيمة ما، يغطي هذا الفصل التوابع الأساسية لطباعة قيمة في PHP وأين يمكن استخدامها.
echo
وprint
تعدّ echo وprint من بنى اللغة وليست دوالًا، لذلك لا حاجة لاستخدام الأقواس لتمرير الوسائط إليها كما نفعل في الدوال (بالرغم من أنه يمكننا دائمًا إضافة أقواس حول أي تعبير PHP لذا يمكننا كتابة echo("test")
دون أيّة مشكلة)، وخرجهما عبارة عن تمثيل سلسلة لمتغير أو ثابت أو تعبير ولا يمكن استخدامهما لطباعة مصفوفات أو كائنات.
-
إسناد السلسلة
Joel
للمتغير$name
:
$name = "Joel";
-
خرج قيمة المتغير
$name
باستخدامecho
وprint
:
echo $name; // Joel print $name; // Joel
- الأقواس غير ضرورية إلا أنّه يمكنك استخدامها:
echo($name); // Joel print($name); // Joel
-
استخدام عدة معاملات (مع
echo
فقط):
echo $name, "Smith"; // JoelSmith echo($name, " ", "Smith"); // Joel Smith
-
print
هي تعبير يرجع القيمة 1 لذا يمكن أن يكون استخدامها مفيدًا أكثر منecho
في بعض الحالات:
print("hey") && print(" ") && print("you"); // you11
تكافئ الشيفرة السابقة مايلي:
print ("hey" && (print (" " && print "you"))); // you11
الصياغة المختصرة للبنية echo
من الممكن افتراضيًا استخدام الصياغة المختصرة عند استخدام وسوم PHP خارج شيفرة PHP، وذلك بدءًا بوسم البداية <?=
وانتهاءً بوسم النهاية ?>
، مثال عن ذلك:
<p><?=$variable?></p> <p><?= "This is also PHP" ?></p>
لاحظ أنّه لم يتم الإنهاء باستخدام الفاصلة المنقوطة ;
، إلا أنّ هذه الشيفرة تعمل بشكلٍ صحيحٍ لأن وسم نهاية PHP ينهي كل تعليمة، لذلك تُحذف عادةً الفاصلة المنقوطة في الصياغة المختصرة.
أولوية البنية print
على الرغم من أن print
بنية لغة إلا أنّ لها أولوية مثل العامل (operator)، وتوضع بين = += -= *= **= /= .= %= &=
والعوامل وتترك ارتباطها. مثال:
echo '1' . print '2' + 3; // 511
نفس المثال مع أقواس:
echo '1' . print ('2' + 3); // 511
الفروقات بين echo
وprint
باختصار، هناك فارقين أساسيّين بينهما:
-
تأخذ
print
معاملًا واحدًا فقط بينما يمكن أن تأخذecho
عدة معاملات. -
ترجع
print
قيمة لذا يمكن استخدامها تعبيرًا (expression).
إظهار عرض بنيوي للمصفوفات والكائنات
الدالة print_r(): تعرض المصفوفات والكائنات لتنقيح الأخطاء (debugging) وتُظهر المصفوفة أو الكائن بتنسيقٍ مقروءٍ من قِبل الإنسان.
إذا كان لديك متغير عبارة عن كائن أو مصفوفة وحاولت عرضه مستخدمًا echo
، فإنّ ذلك سيرمي الخطأ Notice: Array to string conversion
، يمكنك استخدام الدالة print_r
بدلًا منها لإظهار المتغير بتنسيقٍ مقروء من قبل الإنسان، ويمكنك تمرير true
معاملًا ثانيًا للحصول على المحتوى بشكل سلسلة نصية.
$myobject = new stdClass(); $myobject->myvalue = 'Hello World'; $myarray = [ "Hello", "World" ]; $mystring = "Hello World"; $myint = 42; // لعرض بيانات مصفوفة print_r نستخدم print_r($myobject); print_r($myarray); print_r($mystring); print_r($myint);
خرج الشيفرة السابقة هو:
stdClass Object ( [myvalue] => Hello World ) Array ( [0] => Hello [1] => World ) Hello World 42
بالإضافة إلى ذلك يمكن أن نحصل على خرج الدالة print_r
بشكل سلسلة نصية بدلًا من طباعته بشكلٍ بسيط، مثلًا تعرض الشيفرة التالية النسخة المنسّقة من $myarray
في متغير جديد:
$formatted_array = print_r($myarray, true);
لاحظ أنّه إذا كنت تعرض خرج PHP في متصفح ويتم ترجمته إلى HTML فلن يتم عرض فواصل الأسطر وسيكون الخرج أقل وضوحًا إلا إذا كتبت كالتالي:
echo '<pre>' . print_r($myarray, true) . '</pre>';
لاحظ أنّ فتح الشيفرة المصدرية لصفحة ما سيكتب متغيرك بنفس التنسيق أيضًا بدون استخدام الوسم <pre>
.
يمكنك بدلًا من ذلك أن تخبر المتصفح أن ما تعرضه هو نص عادي وليس HTML:
header('Content-Type: text/plain; charset=utf-8'); print_r($myarray);
الدالة var_dump(): خرجها عبارة عن معلومات تنقيح قابلة للقراءة من قِبل الإنسان حول محتوى الوسيط (الوسطاء) متضمنةً نوعه وقيمته، وخرج هذه الدالة أكثر تفصيلًا من خرج الدالة print_r
لأنّ خرجها أيضًا نوع المتغير وقيمته ومعلومات أخرى مثل معرّف الكائن، حجم المصفوفة، طول السلسلة النصية، مؤشر المرجع وغير ذلك…، لذا يمكنك استخدام var_dump
لإخراج نسخة أكثر تفصيلًا للتنقيح.
var_dump($myobject, $myarray, $mystring, $myint);
لاحظ أنّ الخرج أكثر تفصيلًا:
object(stdClass)#12 (1) { ["myvalue"]=> string(11) "Hello World" } array(2) { [0]=> string(5) "Hello" [1]=> string(5) "World" } string(11) "Hello World" int(42)
لاحظ أنّه إذا استخدمت المنقّح xDebug في بيئة التطوير فإنّ خرج var_dump
سيكون محدودًا بشكلٍ افتراضي. يمكنك الاطلاع على التوثيق الرسمي لمزيدٍ من المعلومات حول خيارات تغيير هذا الإعداد الافتراضي.
var_export(): تُخرج هذه الدالة شيفرة PHP صالحة، وتعيد تمثيل المتغير. يمكنك أن تمرر true
معاملًا ثانيًا لترجع المحتويات في متغير.
var_export($myarray); var_export($mystring); var_export($myint);
الخرج هو شيفرة PHP صالحة:
array ( 0 => 'Hello', 1 => 'World', ) 'Hello World' 42
يمكنك أن تفعل التالي لتضع المحتوى في متغير:
$array_export = var_export($myarray, true); $string_export = var_export($mystring, true); $int_export = var_export($myint, 1); // أي قيمة توكيد
بعد ذلك يمكنك إخراجها كالتالي:
printf('$myarray = %s; %s', $array_export, PHP_EOL); printf('$mystring = %s; %s', $string_export, PHP_EOL); printf('$myint = %s; %s', $int_export, PHP_EOL);
ستخرج هذه الشيفرة الخرج التالي:
$myarray = array ( 0 => 'Hello', 1 => 'World', ); $mystring = 'Hello World'; $myint = 42;
ربط السلاسل النصية باستخدام echo
يمكنك استخدام الربط (concatenation) لربط السلاسل "نهاية إلى نهاية" عند إخراجها (باستخدام echo
أو print
مثلًا)، يمكنك دمج المتغيرات باستخدام .
(نقطة).
//متغير بشكل سلسلة نصية $name = 'Joel'; // ربط عدة سلاسل نصية (3 سلاسل في مثالنا) في سلسلة نصية واحدة ثم طباعتها echo '<p>Hello ' . $name . ', Nice to see you.</p>'; // "<p>Hello Joel, Nice to see you.</p>"
وبطريقة مشابهة للربط يمكننا استخدام echo
(بدون أقواس) لربط السلاسل والمتغيرات معًا (بالإضافة إلى التعابير العشوائية الأخرى) باستخدام الفاصلة (,)
.
$itemCount = 1; echo 'You have ordered ', $itemCount, ' item', $itemCount === 1 ? '' : 's'; // "You have ordered 1 item"
موازنة بين دمج السلاسل وتمرير عدة وسائط للبنية echo
يعدّ تمرير عدة وسائط للبنية echo
أفضل من دمج السلاسل في بعض الحالات، تُكتب الوسائط في الخرج بنفس الترتيب الذي تُمرّر به.
echo "The total is: ", $x + $y;
المشكلة في الربط هي أنّ النقطة .
لها الأولوية في التعبير، فإذا استخدمناها في المثال أعلاه سنحتاج لأقواس إضافية ليتم الربط بالشكل الصحيح لأنّ أولوية النقطة تؤثر على العوامل الثلاثية أيضًا.
echo "The total is: " . ($x + $y);
printf أو sprintf
الدالة printf تعرض سلسلة منسقة باستخدام بدائل. الدالة sprintf ترجع سلسلة منسقة.
$name = 'Jeff'; // أن تتوقع سلسلة نصية PHP `%s` تخبر printf("Hello %s, How's it going?", $name); // Hello Jeff, How's it going? // بدلًا من إخراجها مباشرة ($greeting) وضعها في متغير $greeting = sprintf("Hello %s, How's it going?", $name); echo $greeting; // Hello Jeff, How's it going?
من الممكن أيضًا تنسيق عدد باستخدام هاتين الدالتين، مثلًا عند تنسيق قيمة عشرية لتمثيل المال إذ يوجد لدينا دائمًا رقمين عشريين.
$money = 25.2; printf('%01.2f', $money); // 25.20 الخرج
تعمل الدالتان vprintf وvsprintf مثل printf وsprintf لكنهما تقبلان سلسلة تنسيق ومصفوفة من القيم بدلًا من المتغيرات الفردية.
إظهار أعداد صحيحة كبيرة
تُحوّل الأعداد الصحيحة الكبيرة الأكبر من PHPINTMAX تلقائيًا إلى أعداد عشرية (float) في أنظمة 32 بت، يمكن إظهار هذه القيم الصحيحة (أي التدوين غير العلمي) بالدالة printf
مستخدمًا التمثيل العشري كما هو موضح في الشيفرة التالية:
foreach ([1, 2, 3, 4, 5, 6, 9, 12] as $p) { $i = pow(1024, $p); printf("pow(1024, %d) > (%7s) %20s %38.0F", $p, gettype($i), $i, $i); echo " ", $i, "\n"; } // الخرج pow(1024, 1) integer 1024 1024 1024 pow(1024, 2) integer 1048576 1048576 1048576 pow(1024, 3) integer 1073741824 1073741824 1073741824 pow(1024, 4) double 1099511627776 1099511627776 1099511627776 pow(1024, 5) double 1.1258999068426E+15 1125899906842624 1.1258999068426E+15 pow(1024, 6) double 1.1529215046068E+18 1152921504606846976 1.1529215046068E+18 pow(1024, 9) double 1.2379400392854E+27 1237940039285380274899124224 1.2379400392854E+27 pow(1024, 12) double 1.3292279957849E+36 1329227995784915872903807060280344576 1.3292279957849E+36
ملاحظة: انتبه من دقة الأعداد العشرية اللانهائية.
يمكن في هذا المثال المبتكر تمثيل جميع الأعداد كعدد ثنائي لأنّها كلها قوى العدد 1024 (وبالتالي 2)، مثلًا:
$n = pow(10, 27); printf("%s %.0F\n", $n, $n); // 1.0E+27 1000000000000000013287555072
إظهار مصفوفة متعددة الأبعاد مع الفهرس والقيمة وطباعتها ضمن جدول
Array ( [0] => Array ( [id] => 13 [category_id] => 7 [name] => Leaving Of Liverpool [description] => Leaving Of Liverpool [price] => 1.00 [virtual] => 1 [active] => 1 [sort_order] => 13 [created] => 2007-06-24 14:08:03 [modified] => 2007-06-24 14:08:03 [image] => NONE ) [1] => Array ( [id] => 16 [category_id] => 7 [name] => Yellow Submarine [description] => Yellow Submarine [price] => 1.00 [virtual] => 1 [active] => 1 [sort_order] => 16 [created] => 2007-06-24 14:10:02 [modified] => 2007-06-24 14:10:02 [image] => NONE ) )
إظهار مصفوفة متعددة الأبعاد مع الفهرس والقيمة في جدول
<table> <?php foreach ($products as $key => $value) { foreach ($value as $k => $v) { echo "<tr>"; echo "<td>$k</td>"; // Get index. echo "<td>$v</td>"; // Get value. echo "</tr>"; } } ?> </table>
ترجمة -وبتصرف- للفصل [Outputting the Value of a Variable] من كتاب PHP Notes for Professionals book
اقرأ أيضًا
- المقال التالي: أهم العوامل (operators) الموجودة في PHP
- المقال السابق: المتغيرات ذات النطاق العام العالي (Superglobal Variables) في PHP
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.