日期:2014-05-16 浏览次数:20503 次
当我们的PHP程序Debug时,比较常用的方式是将变量的信息打印到浏览器中,例如这样:
<?php echo '<pre>'; print_r($bar); echo '</pre>'; exit;
error_log(print_r($bar, true));
现在已经有一些这样的工具了,比如说 PHP-Console 或者Chrome Logger ,前者针对PHP,后者支持多种服务端语言,使用方式都是先安装一个Chrome扩展,然后提供服务端的库供调用。实现方式大致是利用Session,Cookies等来传递数据。
如上是比较完善的解决方式,都提供了丰富的功能。但如果只是想要一个简单的,可用的,不用安装扩展程序的方式来解决这个问题,那么可以这么来做:
<?php function console_log($data) { if (is_array($data) || is_object($data)) { echo("<script>console.log('".json_encode($data)."');</script>"); } else { echo("<script>console.log('".$data."');</script>"); } }
如上就是最简单的实现方式了,但这么做有一点不太好,就是输出的很凌乱,如果你在不同的位置都调用了该函数,那么在页面的各个位置都将插入一段<script>,虽说JS在页面几乎任何位置都可以,但我们可以有更好的办法,将所有数据统一到一处输出:
<?php //注册一个shutdown函数,如果不这么做的话记得在程序最后echo Console_log::fetch_output(); register_shutdown_function('my_shutdown'); function my_shutdown() { echo Console_log::fetch_output(); } class Console_log { private static $output = ''; static function log($data) { if (is_array($data) || is_object($data)) { $data = json_encode($data); } ob_start(); ?> <?php if (self::$output === ''):?> <script> <?php endif;?> console.log('<?=$data;?>'); <?php self::$output .= ob_get_contents(); ob_end_clean(); } static function fetch_output() { if (self::$output !== '') { self::$output .= '</script>'; } return self::$output; } }