2016-05-19 117 views
1

我一直在使用Javascript和JSON對象一段時間,發現JS對象很容易看到裏面是什麼;您可以將其記錄到控制檯;它的結構基本上可以看到很多層次。這非常適合在我沒有做的對象中工作,所以我可以看到裏面有什麼以及我可以訪問的內容。如何遍歷和記錄PHP對象

到漂亮打印JSON我通常使用的是這樣的:

var str = JSON.stringify(obj, null, 2); // spacing level = 2 
console.log('my pretty JSON Object: ', str); 

我怎麼會採取類似$ myObject的對象在PHP和輸出(print_r的?)嗎?我真的不在乎它是否在控制檯上;我真的只想知道PHP開發人員如何看待PHP內容並瀏覽PHP對象。

我知道我可以json轉換它並將其打印到控制檯;這一切都很好,而且很花時間,但是人們定期做什麼?我想有一種方法可以在不需要其他語言的情況下執行此操作

+1

的var_dump()可以工作。如果你有xdebug –

+0

'print_r'是一個不錯的選擇,那麼它是非常可讀的,如果你需要將它記錄到文件中,使用'var_export'。 – shikhar

+0

[我怎樣才能寫入控制檯在PHP?](http://stackoverflow.com/questions/4323411/how-can-i-write-to-console-in-php) –

回答

-1

回來了這一點,這是代碼時,我想看看怎麼了從我在控制檯PHP進行測試我經常使用這些天:

  ?> 
      <script> 
       $(document).ready(function($){ 
       var json_test = <?php echo json_encode($your_php_variable, JSON_FORCE_OBJECT) ?>; 
       console.log("im testing testy: ", json_test); 
       });// document.ready END 
      </script> 
      <?php 
1

您無法直接從PHP輸出到瀏覽器控制檯,因爲php在服務器上運行,而控制檯在客戶端上。我不認爲這是一個好主意,輸出PHP調試信息到控制檯,但如果你絕對必須的,你可以做輸出一些JavaScript形式的PHP到你的對象登錄到控制檯:

$myObject = new MyObject(); 
$myEscapedJson = str_replace('"','\"', json_encode($myObject)); 
... 
echo "<script>console.log(\"My object from PHP: $myEscapedJson\");</script> 
+0

好吧;我知道我可以做到這一點,但沒有辦法看到對象內部?人們如何定期使用PHP並遍歷對象?除了JS轉換和日誌記錄之外,還必須有一種方法來查看它們包含的內容 – Eolis

+0

使用xdebug並逐步執行IDE中的代碼。或者至少使用xdebug擴展和'print_r'。 –

2

有許多可用的調試軟件包。但是,如果您只想簡單一點,可以自行實施,則可以將數據寫入日誌文件。假設,你想在很多地方做到這一點,你應該創建一個類,每次你想調試你的代碼時調用這個類。您可能還想跟蹤記錄發生的日期和時間。

這裏,你可以用它來定製自己的需要的例子:

創建一個名爲Debug.php文件:

<?php 
class Debug { 

    public static function output($module, $text){ 
     $date = date("l jS \of F Y h:i:s A"); 
     file_put_contents ("/opt/logs/myProject.log", "================\n", FILE_APPEND); 
     file_put_contents ("/opt/logs/myProject.log", "$date\n", FILE_APPEND); 
     file_put_contents ("/opt/logs/myProject.log", "$module: $text\n", FILE_APPEND); 

    } 
} 

然後在您的任何其他PHP文件,你可以包括Debug類有如下一行:

require_once("Debug.php"); 

那麼無論你想使用它只是運行以下命令:

Debug::output("My Module #1", "This is a test"); 

OR

Debug::output("My Module #1 - My Variable", $my_variable); 

OR

Debug::output("My Module #2 - My Object", json_encode($my_object)); 

OR

Debug::output(__FILE__, json_encode($my_object)); 

*註上FILE兩側的雙下劃線。或者使用其他服務器變量之一來獲取適當的文件名。

+1

這很有幫助,謝謝 – Eolis