可悲的是,不论咱们在写代码时如许小心,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 类。

<?phpfunction 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和PORTxdebug.remote_host= localhostxdebug.remote_connect_back = 1#近程配置都是默认,只批改port默认是9000,这里批改为9001,php-fpm运行占用9000端口。xdebug.remote_port = 9001xdebug.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即可