PDA

View Full Version : منظور از var_dump چيست؟



tux-world
سه شنبه 25 بهمن 1390, 07:49 صبح
سلام دوستان. كسي يه توضيحي ميده در اين باره؟

MMSHFE
سه شنبه 25 بهمن 1390, 08:08 صبح
var_dump هم مثل print_r تابعی برای نمایش اطلاعات مختلف درباره متغیرها هست ولی اطلاعات کاملتری نسبت به print_r میده اما درعوض، print_r پارامتر دومی هم داره که اگه true باشه، بجای اینکه اطلاعات متغیر رو چاپ کنه، اون رو return میکنه و میتونید توی یک متغیر ذخیره کنید. توضیحات کاملتر هر دو تابع اینجاست:
var_dump (http://ir.php.net/manual/en/function.var-dump.php)
print_r (http://ir.php.net/manual/en/function.print-r.php)
موفق باشید.

tux-world
سه شنبه 25 بهمن 1390, 08:26 صبح
ممنونم. از اين تگ pre چرا تو html استفاده ميشه؟

MMSHFE
سه شنبه 25 بهمن 1390, 08:43 صبح
بخاطر اینکه خروجی دستورات فوق بصورت متن خام هست و میدونید که توی HTML فقط با استفاده از تگ br متن میشکنه و به سطر بعد منتقل میشیم و همچنین چند فاصله (Space) معادل یک فاصله درنظر گرفته میشه اما تگ pre (مخفف Preserve) باعث میشه که متن به همون صورتی که هست، توی خروجی ظاهر بشه. البته مجبور به استفاده از این تگ نیستین و هر تگ دیگری مثل div و... رو هم میتونید با تنظیمات CSS زیر برای خاصیت style اون تگ، بصورت مشابه در بیارین:
white-space: pre;
موفق باشید.

idocsidocs
سه شنبه 25 بهمن 1390, 14:45 عصر
نمیشه کاری کرد که var_dump فیلدهای آرایه رو توی خطهای زیر هم نشون بده؟

MMSHFE
سه شنبه 25 بهمن 1390, 16:19 عصر
بله میشه:


echo '<pre>'."\n";
var_dump($arr);
echo '</pre>'."\n";

یا:


echo '<div style="white-space: pre;">'."\n";
var_dump($arr);
echo '</div>'."\n";

موفق باشید.

idocsidocs
سه شنبه 25 بهمن 1390, 17:17 عصر
منظورم این بود که بین هر فیلد از فیلدهای آرایه یه کاراکتر خط جدید ایجاد بشه.
این روش که شما می گید فقط بالا و پایین خروجی تابع رو تحت تاثیر قرار می ده.

MMSHFE
سه شنبه 25 بهمن 1390, 17:23 عصر
میشه منظورتون رو دقیقتر بگین؟ خروجی که الآن میگیرین رو میشه بگذارین و بگین چطوری میخواین بشه؟

idocsidocs
سه شنبه 25 بهمن 1390, 17:57 عصر
منظورم اینه که خروجی به صورت زیر نمایش داده بشه:

array(3) {
[0]=> int(1)
[1]=> int(2)
[2]=>
array(3) {
[0]=> string(1) "a"
[1]=> string(1) "b"
[2]=> string(1) "c"
}
}

MMSHFE
سه شنبه 25 بهمن 1390, 18:15 عصر
این کد رو ببینید:


<?php
function dump($arr, $level = 0) {
if(is_array($arr)) {
for($i = 0; $i < $level; $i++) {
echo '&nbsp;&nbsp;&nbsp;&nbsp;';
}
echo '<b>array</b><br/>'.PHP_EOL;
foreach($arr as $key => $item) {
for($i = 0; $i < $level; $i++) {
echo '&nbsp;&nbsp;&nbsp;&nbsp;';
}
echo '&nbsp;&nbsp;'.$key.'&nbsp;=>&nbsp;';
if(is_array($item)) {
echo '<br/>'.PHP_EOL;
}
dump($item, $level + 1);
}
}
else {
$type = gettype($arr);
if($type == 'integer') {
$type = 'int';
}
echo $type.'&nbsp;';
if($type == 'string') {
$len = strlen($arr);
echo '\''.$arr.'\'&nbsp;(length='.$len.')<br/>'.PHP_EOL;
}
else {
echo $arr.'<br/>'.PHP_EOL;
}
echo '<br/>'.PHP_EOL;
}
}

$arr = array(range(1, 10), range('A', 'J'));
var_dump($arr);
echo '<div style="font-family: courier new;">'.PHP_EOL;
dump($arr);
echo '</div>'.PHP_EOL;
?>

موفق باشید.

MMSHFE
سه شنبه 25 بهمن 1390, 18:26 عصر
یا این کد:


ob_start();
var_dump($arr);
$dump = ob_get_clean();
ob_end_clean();
$dump = str_replace("\n", '<br/>'."\n", $dump);
echo $dump;

idocsidocs
سه شنبه 25 بهمن 1390, 18:38 عصر
خودم که می تونم توابع جداگانه بنویسم. می خوام بدونم که راهی نیست که تابع var_dump بصورت خود کار چنین کاری انجام بده؟

MMSHFE
سه شنبه 25 بهمن 1390, 18:46 عصر
نه ولی با ob میتونید خروجی اون رو دریافت کرده و تغییرش بدین. کد دومی که گذاشتم رو ببینید. موفق باشید.