除錯時常需檢視變數內容:標量 (字串、整數、浮點、布林) 用 echo 直接顯示;陣列、物件、資源則需 var_dump 看結構。利用 is_scalar() 可自動判斷並選擇適當輸出方式。
<?php
function show_var($var) {
if (is_scalar($var)) {
echo $var;
} else {
var_dump($var);
}
}
// 測試
$pi = 3.1416;
$proteins = ['hemoglobin', 'cytochrome c oxidase', 'ferredoxin'];
show_var($pi); // 輸出: 3.1416
show_var($proteins); // 輸出: array(3) { [0]=> string(10) "hemoglobin" ... }
?>
true:標量型別 — int、float、string、bool。false:非標量 — array、object、resource、null。resource 雖底層為整數 ID,但 is_scalar() 回傳 false (因為是抽象資料型別)。<?php
function debug_var($var, $label = '', $return = false) {
$out = '';
if ($label) $out .= '' . htmlspecialchars($label) . ': ';
if (is_scalar($var)) {
$out .= htmlspecialchars((string)$var);
} elseif (is_null($var)) {
$out .= 'NULL';
} else {
ob_start();
var_dump($var);
$out .= '' . htmlspecialchars(ob_get_clean()) . '
';
}
if ($return) return $out;
echo $out;
}
// 使用
debug_var($pi, 'PI 常數');
debug_var($proteins, '蛋白質陣列');
$log = debug_var($_SERVER, 'SERVER 變數', true); // 取回字串寫入日誌
?>
echo 還是 var_dump。