共计 2505 个字符,预计需要花费 7 分钟才能阅读完成。
可悲的是,不论咱们在写代码时如许小心,BUG 始终是有的。
谬误
PHP 有几个谬误严重性等级。三个最常见的的信息类型是谬误(error)、告诉(notice)和正告(warning)。它们有不同的严重性: E_ERROR、E_NOTICE 和 E_WARNING。谬误是运行期间的重大问题,通常是因为代码出错而造成,必须要修改它,否则会使 PHP 进行执行。告诉是倡议性质的信息,是因为程序代码在执行期有可能造成问题,但程序不会进行。正告是非致命谬误,程序执行也不会因而而停止。
PHP 遇到一系列外部谬误时,会报告进去作为应答 php.ini 中 error_reporting 的配置 或者是运行时调用 error_reporting() 管制了哪些谬误须要报告,哪些谬误须要主动疏忽。
在开发环境里为了发现并修复 PHP 产生的问题,应该总是把 error_reporting 设置为 E_ALL。在生产环境里,用户可能为了升高信息的具体水平,想要将它设置为相似 E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED,但很多状况下 E_ALL 也同样实用,这样能够更早地正告潜在问题。
如果 PHP 默认谬误处理器还不能满足要求,用户能够通过 set_error_handler() 设置自定义谬误处理器,可解决很多类型的谬误。
PHP7 之后大多数谬误被作为 Error 异样抛出。这种 Error 异样能够像 Exception 异样一样被第一个匹配的 try / catch 块所捕捉。如果没有匹配的 catch 块,则调用异样处理函数(当时通过 set_exception_handler() 注册)进行解决。如果尚未注册异样处理函数,则依照传统形式解决:被报告为一个致命谬误(Fatal Error)。
异样
异样是许多风行编程语言的标配.PHP 外部函数次要应用错误报告,只有一些古代面向对象的扩大应用异样。不过,谬误很容易用 ErrorException 转化成异样。然而,这个技术计划仅实用非 Fatal 级的谬误,PHP 能够完满化身为「重异样」的程序语言,只须要几行代码就能切换过来。基本上你能够利用 ErrorException 类抛出「谬误」来当做「异样」,这个类是继承自 Exception 类。
<?php
function exceptions_error_handler($severity, $message, $filename, $lineno) {throw new ErrorException($message, 0, $severity, $filename, $lineno);
}
set_error_handler('exceptions_error_handler');
?>
这在大量的古代框架中是一个常见的做法,比方 Symfony 和 Laravel。如果开启调试模式,或者进入开发环境的话,这两个框架都会将显示好看清晰的 调用栈。
在开发过程中将谬误当作异样抛出能够更好的解决它,如果在开发时产生异样,你能够将它包在一个 catch 语句中具体阐明这种状况如何解决。每捕获一个异样,都会使你的应用程序越来越强壮。
<?php
// 解决构造
try {} catch (Exception $e) {} finally {}
调试
适合的调试器是软件开发中最有用的工具之一,它使你能够跟踪程序执行后果并监督程序堆栈中的信息。
最简略的方法是应用 var_dump()/print_r() 调错,依据报错打印输出一步步调试。不过这种方法对于一些复制的问题,可能比拟吃力。这时候可能须要借助调试器。
XDEBUG
Xdebug 是一个 PHP 的调试器,它能够被用来在很多 IDE(集成开发环境) 中做断点调试以及堆栈查看。它还能够像 PHPUnit 和 KCacheGrind 一样,做代码笼罩查看或者程序性能跟踪。
XDEBUG 官网地址
xdebug+phpstorm+chrome
一、PHP 装置 xdebug 扩大配置
先装置 php-xdebug(简略略过). 后批改 xdebug 配置如下:
# 扩大地位,不更改
zend_extension="/usr/local/opt/php71-xdebug/xdebug.so"
#新增配置
#容许近程调试
xdebug.remote_enable = 1
#近程所在 HOST 和 PORT
xdebug.remote_host= localhost
xdebug.remote_connect_back = 1
#近程配置都是默认,只批改 port 默认是 9000,这里批改为 9001,php-fpm 运行占用 9000 端口。xdebug.remote_port = 9001
xdebug.max_nesting_level = 512
#能够是任意 Key,这里设定为 PHPSTORM,此 KEY 和前面 IDE 以及浏览器配置保持一致
xdebug.idekey="PHPSTORM"
xdebug.default_enable=on
二、phpstorm 配置
- phpstorm 设置 –>languages and frameworks –> php 找到 php 的设置 抉择好 php level 和 interpreter(环境的 php 版本和 php cli 门路)
- php 配置上面的 servers:新增我的项目的域名配置 debugger 抉择 xdebug
- php 配置上面的 debug:勾选 xdebug 上面所有选项,xdebug 端口批改为 9001 和装置 xdebug 的配置 xdebug.remote_port 端口保持一致
- php 配置下的 debug 上面的 DBGp Proxy 配置项:IDEKEY 和装置 xdebug 的配置 xdebug.idekey 保持一致,host 我的项目的域名,port 我的项目的端口
- 保留配置后,进入工具栏的 RUN,抉择 Edit configurations, 新增 config 抉择 php web application, server 抉择刚 php 配置的 server,browser 抉择 chrome
三、chrome 装置配置
- 装置 Xdebug helper 扩大
- IDE key 抉择 phpstorm,填写 PHPSTORM,和 xdebug.idekey 保持一致
四、所有配置实现,IDE 中打断点,运行 debug 即可