PHP 代码调试 - 收集

1.应用场景  //越发觉得要学习一门语言,最起码的要文档看几遍.

编写代码, 难免要调试, 特别针对后端接口, 有时, 并不想也不需要依赖前端接口参数来调试.

PHP调试方法有: xdebug, 但是有时因环境等原因并不能立马搞定, 或者还是有一些问题, 可以采用最简单的方式打印方式

如使用, echo  print_r  var_dump  var_export 

2.学习/操作

https://www.php.net/manual/zh/debugger.php //PHP 的调试 ¶

 

备注:

php打印换行:

方式一:

echo "
";  //推荐 [其他几种有时候不能生效, 原因TBD]  
或者 print("
");  //print()是结构, 不是函数. 

方式二:

echo "\n";  或者  print "\n";

方式三:

echo PHP_EOL;

 

1.使用var_export()

详细参见文档:  https://www.php.net/manual/zh/function.var-export.php

 

(PHP 4 >= 4.2.0, PHP 5, PHP 7)

var_export — 输出或返回一个变量的字符串表示

 

此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。

您可以通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。

比较 var_export() 和 var_dump().

 

code如下:

$arr = [
'key1'=>'val1',
'key2'=>'val2',
'key3'=>'val3',
'key4'=>'val4',
'key5'=>'val5'
];

// $str = var_export($arr, true);
// echo $str;//结果 array ( 'key1' => 'val1', 'key2' => 'val2', 'key3' => 'val3', 'key4' => 'val4', 'key5' => 'val5', )
$test = var_export($arr);
var_dump($test);

 

输入结果:

array (
  'key1' => 'val1',
  'key2' => 'val2',
  'key3' => 'val3',
  'key4' => 'val4',
  'key5' => 'val5',
)NULL

 

由上可知: 

var_export()会一直保留着结构化形式存储数据.
但此时的变量值的类型已是字符串类型($str),不能再以数组的方式取值.否则报错

 

用处: 可以打印出数组结果, 直接/修改作为参数 , 方便快速调试接口.

 

2.使用xdebug参见

https://blog.csdn.net/william_n/article/details/80072191

https://blog.csdn.net/william_n/article/details/94403410

 

3.关于时区的设置

暂见: https://www.php.cn/php-ask-430597.html

临时性处理:

获取当前时区:

date_default_timezone_get();

设置时区:

date_default_timezone_set('Asia/Shanghai');

 

4. 自定义样式. 编写全局函数调试

function p($var){
    if (is_bool($var)){
        var_dump($var);
    } else if (is_null($var)){
        var_dump(NULL);
    } else {
        echo "
        " . print_r($var, true) . "
"; } }

打印样式如下:

PHP 代码调试 - 收集_第1张图片

补充:

有时候, 打印信息分行输出便于查看

$data = $_SERVER;
// $data = array(
    // "age" => 18,
    // "name" => "Ryan Zheng"
// );
highlight_string("");

截图:

PHP 代码调试 - 收集_第2张图片

或者

使用json_encode();

然后借助json.cn解析美化也可.

截图:

PHP 代码调试 - 收集_第3张图片

 

 

5. 找到 类/方法/函数/属性 所在的路径[文件位置]  //利用PHP的反射

有时候,使用IDE等工具搜索不出来,使用这种方式, 也更加快,准确。

1. 类

if (class_exists ('Log')) {
    $func = new ReflectionClass('Log');
    echo    $func->getFileName();
    exit('stop');
}

结果:

2. 方法

//参数1是类名,参数2是方法名
$func = new ReflectionMethod('UnifiedOrder_pub', 'getPrepayId');
//从第几行开始
$start = $func->getStartLine() - 1;
//从第几行结束
$end =  $func->getEndLine() - 1;
//获取路径地址
$filename = $func->getFileName();

3. 函数

//这是通过方法名查找方法所在位置
$funcName="SafeHtml"; //要查找的函数名
Reflection::export(new ReflectionFunction($funcName));

 

6.打印所有的参数 

//有时, 接收到[前端传递到后端]接口的参数很多[层级有些深], 使用var_dump()等调试函数, 语句并不能输出全部.

使用下面的code.

$dump = function ($var){
    echo '

'; // This is for correct handling of newlines
    ob_start();
    var_dump($var);
    $a=ob_get_contents();
    ob_end_clean();
    echo htmlspecialchars($a,ENT_QUOTES); // Escape every HTML special chars (especially > and < )
    echo '
';
};

 

$data = [....]; //要打印的数据

$dump($data);

详细参见: https://www.php.net/manual/zh/function.var-dump

 

7. 查找需要的参数[值]

解决办法: 查找算法.

TBD

 

 

 

 

 

后续补充

...

3.问题

TBD

4.参考

https://www.php.net/manual/zh/debugger.php //PHP 的调试 ¶

https://www.php.net/manual/zh/function.var-export.php

https://blog.csdn.net/william_n/article/details/80072191

https://blog.csdn.net/william_n/article/details/94403410

https://www.php.cn/php-ask-430597.html  //php设置时区

https://www.imooc.com/learn/696  //从零开始打造自己的PHP框架

https://www.php.net/manual/zh/function.var-dump  //var_dump()

后续补充

...

你可能感兴趣的:(PHP)