php斷點語句,除錯的幾種方法
我常用的語句
dump($client); //列印變數並且輸出變數屬性
return json($client); //直接跳出方法體,並返回資料
echo $client['name']; //列印
exit("阻斷");//阻斷程式向下執行
斷點除錯是程式開發過程中的一個必不可少的步驟,一些程式的斷點除錯操作比較簡單,只需在編輯器裡標記哪行為斷點,便可得知程式各個環節的輸出結果,例如c#、VB、Delphi等語言。
但是對於PHP程式的除錯來說,就不是這麼簡單了。本文將談談php斷點除錯的幾種方法,對於php新手來說,可能更有參考價值。
首先需要說明的是,php程式除錯需要手動編寫部分程式碼,目的是斷截程式執行緒的執行,輸出指定環節的結果,就是所謂的斷點除錯。所以,實際上需要討論的問題是採用什麼斷點程式碼更合適。
die()和exit()
die()和exit()函式都有終止執行緒的作用,是php斷點除錯需要使用的最主要的函式,它們也是php程式設計師使用非常頻繁的函式。然而兩者又有什麼區別呢?在程式除錯時需要注意什麼問題呢?
die()函式一般與“or”一併使用,寫作“or die()”,經常看到這樣的語句:
$file = fopen($filename, 'r') or die("抱歉,無法開啟: $filename")
or在這裡是這樣理解的,因為在PHP中並不區分資料型別,所以$file既可以是int也可以bool,所以這樣的語句不會報錯。但其處理過程可能有些朋友不大明白。其實在大多數的語言中, bool or bool這樣的語句中,如果前一個值為真後一個值就不會再判斷了。這裡也是的,所以如果fopen函式執行正確的話,會返回一個大於0的int值(這其實就是"真"),後面的語句就不會執行了。如果fopen函式執行失敗,就會返回false,那麼就會判斷後面的表示式是否為真了。結果執行了die()之後,不管返回什麼,程式都已經停止執行了,並且顯示指定的出錯資訊,也就達到了除錯的目的。就這樣。
實際上,die和exit是等價的,都是用來終止當前指令碼。
php手冊對兩者的解釋如是說:
exit() 函式輸出一條訊息,並退出當前指令碼。該函式是 die() 函式的別名。
die() 函式輸出一條訊息,並退出當前指令碼。該函式是 exit() 函式的別名。
例項:
<?php $site = "http://www.w3school.com.cn/"; fopen($site,"r") or exit("Unable to connect to $site"); ?>
<?php $site = "http://www.w3school.com.cn/"; fopen($site,"r") or die("Unable to connect to $site"); ?>
var_dump()和print_r()
var_dump -- 列印變數的相關資訊
void var_dump ( mixed expression [, mixed expression [, ...]] )
此函式顯示關於一個或多個表示式的結構資訊,包括表示式的型別與值。陣列將遞迴展開值,通過縮排顯示其結構。
提示: 為了防止程式直接將結果輸出到瀏覽器,可以使用輸出控制函式(output-control functions)來捕獲此函式的輸出,並把它們儲存到一個例如 string 型別的變數中。
<?php
$a = array (1, 2, array ("a", "b", "c"));
var_dump ($a);
$b = 3.1;
$c = TRUE;
var_dump($b,$c);
?>
var_dump()可以輸出多個變數,如:var_dump($b,$c)
print_r -- 列印關於變數的易於理解的資訊
bool print_r ( mixed expression [, bool return] )
注: 引數 return 是在 PHP 4.3.0 的時候加上的
print_r() 顯示關於一個變數的易於理解的資訊。如果給出的是 string、integer 或 float,將列印變數值本身。如果給出的是 array,將會按照一定格式顯示鍵和元素。object 與陣列類似。
記住,print_r() 將把陣列的指標移到最後邊。使用reset() 可讓指標回到開始處。
<pre>
<?php
$a = array ('a' => 'apple',
'b' => 'banana',
'c' => array ('x','y','z'));
print_r ($a);
?>
</pre>
上邊的程式碼將輸出:
<pre> Array ( [a] => apple [b] => banana [c] => Array ( [0] => x [1] => y [2] => z ) ) </pre>
如果想捕捉 print_r() 的輸出,可使用 return 引數。若此引數設為 TRUE,print_r() 將不列印結果(此為預設動作),而是返回其輸出。
例子:return 引數示例
<?php
$b = array ('m' => 'monkey',
'foo' => 'bar',
'x' => array ('x', 'y', 'z'));
$results = print_r ($b, true); //$results 包含了 print_r 的輸出結果
?>
注: 如果想在 PHP 4.3.0 之前的版本中捕捉 print_r() 的輸出,可使用輸出控制函式。
注: 在 PHP 4.0.4 之前的版本中,如果給出的 array 或 object 包含了直接或間接指向自身的引用,print_r() 將永遠繼續下去。print_r($GLOBALS) 就是一個例子,因為 $GLOBALS 自身即是全域性變數,其包含了指向自身的引用。
Zend Debugger
環境:PHP 5.2.5,Zend studio 9,Zend Debugger 5.2.10
需要下載的檔案
zend debugger: http://download.csdn.net/detail/nsrainbow/5958535
zend debugger toolbar (用於Chrome): http://download.csdn.net/detail/nsrainbow/5958559
zend studio 9 (下載那個 9.0.3): http://www.zendstudio.net/zend-studio-all-in-one-download/
安裝zend debugger
- zend debugger下載後解壓開扔到 d:\zend\ZendDebugger.dll
- 然後新增這段到php.ini最後
[plain] view plain copy- [Zend]
- zend_extension_ts="d:/zend/ZendDebugger.dll"
- zend_debugger.allow_hosts=127.0.0.1/32,127.0.0.1/24
- zend_debugger.expose_remotely=allowed_hosts
- 重啟Apache
- 在你的網站資料夾的根目錄下新建一個 a.php ,內容寫 <?php phpinfo(); ?>
- 開啟瀏覽器,訪問 a.php如果出現以下文字表示成功
安裝zend debugger toolbar 到 Chrome
- 開啟chrome 把下載好的 zend debugger toolbar 解壓出 zend-debugger-extension.crx 檔案拖入到 Chrome 的擴充套件程式裡面安裝
- 如果瀏覽器右上角出現這樣的一個綠色地球表示成功
zend studio的安裝過程不講
如何除錯
在要除錯的頁面點選 綠地球,然後選 current page 會立即重新整理當前頁面,並且跳到zend studio裡面(首先你的zend studio必須是開啟著的狀態),如果是 next page 表示是下一個頁面除錯,就是點選了提交或者是超連結再除錯
重點內容摘至:https://blog.csdn.net/qi_ruihua/article/details/69282531