2015-07-10 24 views
22

我經常使用echo調試功能代碼:如何檢查我的函數print/echo是什麼?

public function MyFunc() { 

    // some code... 
    echo "OK"; 
    // some code... 

} 

我如何檢查我的函數打印的/呼應的東西嗎?

(僞代碼):

MyFunc(); 

if (<when something was printed>){ 
    echo "You forgot to delete echo calls in this function"; 
} 
+4

不清楚你問什麼。 –

+6

由於它是__你的函數,你應該知道里面有什麼 –

+0

寫你的測試,而不是通過echo語句來調試。 –

回答

36

這應該爲你工作:

就打電話給你的功能,而你有output buffering和檢查內容則是空的,例如

ob_start(); 

//function calls here 
MyFunc(); 

$content = ob_get_contents(); 

ob_end_clean(); 

if(!empty($content)) 
    echo "You forgot to delete echos for this function"; 
+1

)作爲一種替代方法,您還可以檢查如果標題已發送:http://php.net/manual/en/function.headers-sent.php – jeroen

+1

@ jeroen啊,是的,這也是一種方式,沒有想過那:)(它可能給當你已經在函數調用之上回顯了某些東西時,你會遇到一些麻煩) – Rizier123

+0

如果被測函數本身也在輸出緩衝區中播放,那麼要小心一下 –

2

這是檢查是否有迴音的錯誤方法。

您可以一個名爲is_echoed變量設置爲1,也可以返回值

public $is_echoed = 0; 
//rest 
$this->is_echoed = 1; 

function myFunc() 
{ 
    return "OK"; 
} 
if(myFunc() == 'OK') 
    //rest 
1

你爲什麼想嘗試看到的這樣一個廣泛的過程中,如果有什麼東西被迴應與否?

對於調試,你可以肯定地使用echo來查看在特定用例期間是否正在命中特定塊。但我建議你使用標誌並將值返回給調用函數。

function xyz() { 

    if (something) return some_value; 
    else return some_other_value; 
} 

沒有特別需要有變量和存儲0或1的使用空間時,你可以返回一個硬編碼的文字。

16

您可以創建一個$debug標誌和一個debuglog()函數,該函數檢查調試標誌,然後纔回應消息。然後,您可以在一個位置打開和關閉調試消息。

define('DEBUGMODE', true); // somewhere high up in a config 

function debuglog($msg){ 
    if(DEBUGMODE){ echo $msg; } 
} 

如果你想擺脫你的調試回聲的,你可以搜索"debuglog("並刪除這些代碼行。這樣,您不會意外刪除正常執行​​中所需的任何回顯語句,也不會錯過任何應該真正刪除的調試回顯語句。

+0

聽起來不錯,但最終我想從我的代碼中刪除所有的調試日誌調用.... –

+1

在這一點上,你可以只搜索'「debuglog(」'和刪除那些代碼行的所有實例。 – Matt

+5

最合適的解決方案,恕我直言 – Mints97

0

我會建議你使用像log4php[1]

但如果沒有,我用這樣的函數:

define('DEBUG', true); 
function debug($msg){ 
    if(DEBUG){ echo $msg; } 
} 

或者像這樣看log in the browser控制檯:

function debug_to_console($data) { 

    if (is_array($data)) 
     $output = "<script>console.log('Debug Objects: " . implode(',', $data) . "');</script>"; 
    else 
     $output = "<script>console.log('Debug Objects: " . $data . "');</script>"; 

    echo $output; 
} 
相關問題