1. 程式人生 > >php斷點語句,除錯的幾種方法

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

 

  1. zend debugger下載後解壓開扔到 d:\zend\ZendDebugger.dll
  2. 然後新增這段到php.ini最後
    [plain] view plain copy
    1. [Zend]  
    2. zend_extension_ts="d:/zend/ZendDebugger.dll"  
    3. zend_debugger.allow_hosts=127.0.0.1/32,127.0.0.1/24  
    4. zend_debugger.expose_remotely=allowed_hosts  
  3. 重啟Apache
  4. 在你的網站資料夾的根目錄下新建一個 a.php ,內容寫 <?php phpinfo(); ?>
  5. 開啟瀏覽器,訪問 a.php如果出現以下文字表示成功

安裝zend debugger toolbar 到 Chrome

  1. 開啟chrome 把下載好的  zend debugger toolbar 解壓出 zend-debugger-extension.crx 檔案拖入到 Chrome 的擴充套件程式裡面安裝
  2. 如果瀏覽器右上角出現這樣的一個綠色地球表示成功

zend studio的安裝過程不講

如何除錯

在要除錯的頁面點選 綠地球,然後選 current page 會立即重新整理當前頁面,並且跳到zend studio裡面(首先你的zend studio必須是開啟著的狀態),如果是 next page 表示是下一個頁面除錯,就是點選了提交或者是超連結再除錯

 

 

重點內容摘至:https://blog.csdn.net/qi_ruihua/article/details/69282531