php错误处理和php异常处理机制
php错误处理
当我们开发程序时,有时候程序出现了问题,我们就可以用以下几种办法找出错误。
开发阶段:开发时输出所有的错误报告,有利于我们进行程序调试
运行阶段:我们不要让程序输出任何一种错误报告(不能让用户看到(包括懂技术, 不懂技术的人))
将错误报告写入日志中
一、指定错误报告 error_reporting = E_LL
二、关闭错误输出 display_errors = Off
三、开启错误日志功能 log_errors = On
1. 默认如果不指定错误日志位置,则默认写WEB服务器的日志中
2. 为error_log选项指定 一个文件名(可写)
3. 写入到操作系统日志中error_log=syslog
以下代码示例
<?php
// error_reporting(E_ALL);
/// ini_set("display_errors", "off");
// ini_set("error_log", "syslog");
// ini_set("MAX_FILEUPLOAD", 200000000);
// echo ini_get("upload_max_filesize");
// error_log("this is a error message!!!!");
getType($var); //注意
getType(); //警告
getTye(); //错误 会终止程序运行
echo "###########################<br>";
?>
当然php还提供了函数error_get_last()来获得错误信息
函数定义和用法
error_get_last()函数获取最后发生的错误。该函数以数组的形式返回最后发生的错误。返回的数组包含 4 个键和值: [type] - 错误类型 [message] - 错误消息 [file] - 发生错误所在的文件 [line] - 发生错误所在的
小例子:
<?php echo $test; print_r(error_get_last()); ?>输出:
Array ( [type] => 8 [message] => Undefined variable: test [file] => D:\www\test.php [line] => 2 )
所以这样我们也很方便了…这样是不是对调试程序和排查错误的时候很有帮助呢?
这些错误报告级别是错误处理程序旨在处理的错误的不同的类型:
值 常量 描述托福答案 www.yztrans.com
2 E_WARNING 非致命的 run-time 错误。不暂停脚本执行。
8 E_NOTICE Run-time 通知。
脚本发现可能有错误发生,但也可能在脚本正常运行时发生。
256 E_USER_ERROR 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR.
512 E_USER_WARNING 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING.
1024 E_USER_NOTICE 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE.
4096 E_RECOVERABLE_ERROR 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler())
8191 E_ALL 所有错误和警告,除级别 E_STRICT 以外。
(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分)
php异常处理机制
定义:
异常处理: 意外,是在程序运行过程中发生的意料这外的事,使用异常改变脚本正常流程
语法格式:
try
{ //…}
catch(Exception $e)
{ //…}
PHP中try{}catch{}是异常处理。
将要执行的代码放入TRY块中,如果这些代码执行过程中某一条语句发生异常,则程序直接跳转到CATCH块中,由$e收集错误信息和显示。
PHP中try{}catch{}语句
为了进一步处理异常,我们需要使用PHP中try{}catch{}----包括Try语句和至少一个的catch语句。任何调用 可能抛出异常的方法的代码都应该使用try语句。Catch语句用来处理可能抛出的异常。
例子:
我写一段代码:
自己定义一个异常类
作用:就是写一个或多个方法解决当发生这个异常时的处理方式
1. 自己定义异常类,必须是Exception(内置类)的子类, 可以查看PHP手册里面Exception(内置类)的使用方法
2. Exception类中的只有构造方法和toString()可以重写, 其它都final
<?php
class OpenFileException extends Exception { //继承PHP的内置类
function __construct($message = null, $code = 0){
parent::__construct($message, $code);
echo "wwwwwwwwwwwwwww<br>";
}
function open(){
touch("tmp.txt");
$file=fopen("tmp.txt", "r");
return $file;
}
}
?>
1. 如果try中代码没有问题,则将try中代码执行完后就到catch后执行
2. 如果try中代码有异常发生,则抛出一个异常对象(使用throw),抛出给了catch中的参数, 则在try中代码就不会再继续执行下去 直接跳转到catch中去执行, catch中执行完成, 再继续向下执行
注意: 提示发生了什么异常,这不是主要我们要做事,需要在catch中解决这个异常, 如果解决不了,则出去给用户在下面代码中,如果我没有这个TMP.TXT文件的话,就会抛出异常了。
如果有异常,我们调用OPEN方法就可以解决这个异常了。
<?php
try{
$file=fopen("tmp.txt", "r"); // 尝试读取这个文件
if(!$file)
throw new OpenFileException("文件打开失败"); //如果文件不存在则抛出异常
}catch(OpenFileException $e){ //$e =new Exception();
echo $e->getMessage()。"<BR>"; //getMessage() 是PHP里面内置的方法,可以直接调用
$file=$e->open();
}
下面将代码进行整理以及多个异常处理方法:
<?php
/*
* 异常处理: 意外,是在程序运行过程中发生的意料这外的事,使用异常改变脚本正常流程
*
* PHP5中的一个新的重要特性
*
* if(){
*
* }else{
*
* }
*
* try {
*
* }catch(异常对象){
*
* }
*
* 1. 如果try中代码没有问题,则将try中代码执行完后就到catch后执行
* 2. 如果try中代码有异常发生,则抛出一个异常对象(使用throw),抛出给了catch中的参数, 则在try中代码就不会再继续执行下去
* 直接跳转到catch中去执行, catch中执行完成, 再继续向下执行 www.jx-jf.com
*
*
* 注意: 提示发生了什么异常,这不是主要我们要做事,需要在catch中解决这个异常, 如果解决不了,则出去给用户
*
* 二、自己定义一个异常类
*
* 作用:就是写一个或多个方法解决当发生这个异常时的处理方式
*
* 1. 自己定义异常类,必须是Exception(内置类)的子类,
* 2. Exception类中的只有构造方法和toString()可以重写, 其它都final
*
* 三、处理多个异常
*
*
* 自己定义功能类时如果在方法中抛出异常
*
*
*/
class OpenFileException extends Exception {
function __construct($message = null, $code = 0){
parent::__construct($message, $code);
echo "wwwwwwwwwwwwwww<br>";
}
function open(){
touch("tmp.txt");
$file=fopen("tmp.txt", "r");
return $file;
}
}
class DemoException extends Exception {
function pro(){
echo "处理demo发生的异常<br>";
}
}
class TestException extends Exception {
function pro(){
echo "这里处理test发生的异常<br>";
}
}
class HelloException extends Exception {
}
class MyClass {
function openfile(){
$file=@fopen("tmp.txt", "r");
if(!$file)
throw new OpenFileException("文件打开失败");
}
function demo($num=0){
if($num==1)
throw new DemoException("演示出异常");
}
function test($num=0){
if($num==1)
throw new TestException("测试出错");
}
function fun($num=0){
if($num==1)
throw new HelloException("###########");
}
}
try{
echo "11111111111111<br>";
$my=new MyClass();
$my->openfile();
$my->demo(0);
$my->test(0);
$my->fun(1);
echo "22222222222222222<BR>";
}catch(OpenFileException $e){ //$e =new Exception();
echo $e->getMessage()。"<BR>";
$file=$e->open();
}catch(DemoException $e){
echo $e->getMessage()。"<BR>";
$e->pro();
}catch(TestException $e){
echo $e->getMessage()。"<BR>";
$e->pro();
}catch(Exception $e){
echo $e->getMessage()。"<BR>";
}
var_dump($file);
echo "444444444444444444444<BR>";
php错误处理和php异常处理机制的更多相关文章
- C异常处理和C++异常处理的对比
每一种编译器实现异常处理的方式会有所不同,但是都是基于Windows的SEH异常处理.这里以MSC编译器为例. C异常处理 #include <Windows.h> int main(in ...
- php自定义错误处理和try{}catch(){}学习
<?php //语法错误 //运行时的错误 //逻辑错误 //php的错误报告级别 // display_errors; // ini_set("display_errors" ...
- ReactiveX 学习笔记(8)错误处理和 To 操作符
Error Handling Operators Operators to Convert Observables 本文的主题为对 Observable 进行错误处理的操作符以及转换 Observab ...
- 异常处理和UDP Socket套接字
一.异常处理 1.什么是异常处理: 程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表达出来,造成的影响就是整个程序无法再正常进行. 2.异常的结构: 1.异常 ...
- 【Go语言】错误与异常处理机制
①error接口 Go语言中的error类型实际上是抽象了Error()方法的error接口 type error interface { Error() string } Go语言使用该接口进行标准 ...
- ThinkPHP5.0源码学习之注册错误和异常处理机制
在base.php文件中,用一句代码\think\Error::register();实现错误和异常处理机制的注册. // 注册错误和异常处理机制 \think\Error::register(); ...
- PHP 注册错误和异常处理机制
注册错误和异常处理机制有三个PHP函数需要学习 1. register_shutdown_function('Bootstrap\Library\Frame::fatalError'); 2. set ...
- C++复习8.异常处理和RTTI
C++异常处理和RTTI技术 20130930 1.异常处理的基本知识 C语言中是没有内置运行时错误处理机制,对于错误发生的时候使用的几种处理机制: 函数返回彼此协商后统一定义的状态编码来表示操作成功 ...
- Java异常处理机制 try-catch-finally 剖析
Java拥有着强大的异常处理机制,最近初步学习了下,感觉内容还是挺多的,特此来将自己的理解写出来与大家分享. 一. 在Java代码code中,由于使用Myeclipse IDE,可以自动提醒用户哪里有 ...
随机推荐
- 【git】git常用命令简介
使用Git也好长时间了,但一直没系统的学习过,现在总结以下工作中用到的,记录以下,以后忘记了可以来看看. 因为操作系统是Windows,所以将简单介绍一下通过git bash命令行的使用: 本文将不介 ...
- 深入JS系列学习4
深入JS系列学习4 Javascript 装载和执行 明白了JS的装载和执行,没有给出很好的解决方案,在IE下可用defer属性: 浏览器对于Javascript的运行有两大特性:1)载入后马上执行, ...
- cloudCompute
云计算使企业可以迅速对市场做出反应而且加强了企业内部的协同 人人都在用云计算的时候能够迅速迁移到云平台已经不叫优势了,反而不使用云计算成为了一种劣势
- 聚焦设计交易与商业落地 DANG·DHUB设计师平台上线【图】_品牌资讯_服饰_太平洋时尚网
聚焦设计交易与商业落地 DANG·DHUB设计师平台上线[图]_品牌资讯_服饰_太平洋时尚网 聚焦设计交易与商业落地 DANG·DHUB设计师平台上线
- JS中字符串倒序的两种方法
var reverse = function( str ){ var stack = [];//生成一个栈 for(var len = str.length,i=len;i>=0;i-- ){ ...
- VB.NET版机房收费系统---七仙女之系统登录
VB.NET第一版机房收费系统,告一段落,验收的时候.问题也是大大的存在,没实用上设计模式,什么触发器.存储过程,都没实用上.看看其她小伙伴的,七层实现登录?那是什么东东,相比較我的三层而言,多了两倍 ...
- linux crontab 定时命令
一直认为Timer是比较好的实现定时器的方法,后来遇到在linux下的命令制定定时任务才发现,Timer的劣势所在,在Timer的时候很可能你的任务会被当做一个死程序被杀掉等等......上次一个同事 ...
- Eclipse自动插件依赖的一种配置解决方式
Eclipse的插件具有以下特点: (1)每一个插件有自己独立的classloader (2)插件资源的交互通过MENIFEST.MF中"Export-Package, Require-Bu ...
- txt文件导入mysql--转
MySQL写入数据通常用insert语句,如 insert into person values(张三,20),(李四,21),(王五,70)…; 但有时为了更快速地插入大批量数据或交换数据,需要从文 ...
- ERROR<53761> - Plugins - conn=-1 op=-1 msgId=-1 - Connection Bind through PTA failed (91). Retrying...
LDAP6.3在DSCC控制台启动实例完成,但是操作状态显示“意外错误”,查看日志如下: 04/May/2016:21:10:39 +0800] - Sun-Java(tm)-System-Direc ...