【问题标题】:How to traverse and log PHP Objects如何遍历和记录 PHP 对象
【发布时间】:2016-09-16 15:06:26
【问题描述】:

我在 Javascript 和 JSON 对象方面工作了一段时间,发现 JS 对象很容易看到里面的内容;您可以将其记录到控制台;构造它,基本上可以看到很多层次。这对于处理我没有制作的对象非常有用,因此我可以看到里面有什么以及我可以访问什么。

为了漂亮地打印 JSON,我通常使用这样的东西:

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

如何在 PHP 中获取像 $myObject 这样的对象并输出(print_r?)它?我真的不在乎它是否是控制台;我真的只是想知道 PHP 开发人员如何看待和导航 PHP 对象。

我知道我可以将其 json 转换并打印到控制台;这一切都很好,花花公子,但这是人们经常做的事情吗?我认为有一种方法可以做到这一点而无需其他语言

【问题讨论】:

  • var_dump() 可以工作。如果你有 xdebug
  • print_r 是一个不错的选择,如果您需要将其记录到文件中,请使用 var_export

标签: php object logging


【解决方案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>

【讨论】:

  • 好的;我知道我可以做到,但有没有办法查看对象内部?人们如何定期使用 PHP 和遍历对象?除了 JS 转换和日志记录之外,必须有一种方法可以查看它们包含的内容
  • 使用 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");

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

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

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

*注意FILE两边的双下划线。或者使用其他服务器变量之一来获取适当的文件名。

【讨论】:

    【解决方案3】:

    回到这一点,这是我最近经常使用的代码,当我想在控制台中查看我的 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
    

    【讨论】:

      猜你喜欢
      • 2012-01-29
      • 2021-10-13
      • 2017-02-03
      • 2015-10-23
      • 1970-01-01
      • 2014-08-09
      • 2012-02-22
      • 2015-10-24
      • 2021-05-08
      相关资源
      最近更新 更多