原文:PHP 15:异常

看完了out_put_fns.php文件,让我们再看看db_fns.php文件。其代码非常简单,如下:

   ?>

其作用是连接数据库,并返回一个数据库连接。在这里我们暂且不提数据库连接,因为第7行的代码是抛出一个异常的。所以我们先讨论PHP的异常,然后在下一章节中专门讲解数据库的操作等。
 PHP的异常机制和Java等语言差不多。但是还是有区别的。
PHP的异常同样是以try...throw...catch来捕获异常。
在某些语言,例如C#,Java,try里的代码有的时候会自动抛出异常,但是载PHP中,你必须手动捕获这个异常。和其他语言一样,PHP也会判断合适的异常抛出,那就是后面catch的作用了。
PHO也有异常的类。让我们先看一个例子,代码如下:


   ?> 

它将输出:

\htdocs\test.phpon line4

这里我们看到了Exception类的使用。如果你对C#和Java熟悉的话,相信不是很难看懂。
PHP5提供了Exception类,其构造时需要2个参数,一个是异常消息,一个是异常代码。
除了构造函数之外,它还包括以下函数。

  • getCode()--返回传递给构造函数的代码。
  • getMessage()--返回给构造函数的消息。
  • getFile()--返回产生异常的代码的文件的完整路径。
  • getLine()--返回产生异常代码的行号。
  • getTrace()--返回一个产生异常的代码以及回退路径,这个和.net里的异常,当你编写一个ASP.NET页面时,如果发生异常,.net会将错误的信息,所在的文件,以及回退路径信息全部提供给你。
  • getTraceAsString()--与getTrace()一样,只不过它将格式化为字符串。
  • __toString()--允许简单的显示Exception对象,并且给出所有以上方法给出的信息。

可以调用 echo $e显示所有信息。例如上面的代码如此调用,结果是

 Stack trace: #0 {main}

和其他语言一样,PHP也可以自定义Exception类。
幸运的是PHP提供了Exception的代码。让我们一睹为快。

            ?> 

让我们看看这个类,如果我们打算自定义自己的异常,必须从继承这个类。看样子只有__toString可以重写,因为其他的方法都有final关键字,说明子类是没法重写的。看看下面的例子吧:

             ?> 

输出为:

Exception 43:An Exception occurs here!inG:\Apache Group\Apache2.2\htdocs\test.phpon line4

总结,本章讨论了PHP异常的特点,与其他语言的一些不同之处。最后还介绍了自定义的异常。

PHP 15:异常的更多相关文章

  1. 简明Python3教程 15.异常

    简介 当程序发生意外情况时则产生异常. 例如你需要读一个文件而这个文件并不存在会咋样?又或者是程序运行时你把它误删除了呢? 上述情形通过异常进行处理. 类似的,如果你的程序存在一些非法语句会发生什么呢 ...

  2. TRUNCATE引起CPU异常上涨

    13:05 2015/9/11 午睡醒来收到几封CPU使用率预警邮件.登录对应服务器,打开资源监视器,看到sqlservr.exe进程的CPU达到40%(平常服务器CPU消耗在10%以内).查看CPU ...

  3. Android BaseAdapter加载多个不同的Item布局时出现UncaughtException in Thread main java.lang.ArrayIndexOutOfBoundsException: length=15; index=15

    java.lang.ArrayIndexOutOfBoundsException: length=15; index=15 异常出现的场景:在做聊天界面时,需要插入表情,图片,文字,名片,还有几种较为 ...

  4. 关于LIst Set Map 异常的知识点---我的笔记

    今天新的内容1.List接口2.Set接口3.Map集合4.异常==================================================================== ...

  5. Visual Studio高级调试技巧

    1. 设置软件断点,运行到目标位置启动调试器 方法①:使用汇编指令(注:x64 c++不支持嵌入汇编) _asm 方法②:编译器提供的方法 __debugbreak(); 方法③:使用windows ...

  6. Delphi的面向对象编程基础笔记

    1.面向对象.一门面向对象的编程语言至少要实现以下三个OOP的概念 封装:把相关的数据和代码结合在一起,并隐藏细节.封装的好处是利用程序的模块化,并把代码和其他代码分开 继承:是指一个新的类能够从父类 ...

  7. .NET复习笔记

    .NET 基础知识点汇总 课前知识储备. 一.C#与.NET的区别? 1..NET/dotnet:一般指.Net Framework框架,一种平台,一种技术 2.C#(sharp):一种编程语言,可以 ...

  8. C++ Primer 有感(异常处理)

    1.异常是通过抛出对象而引发的.该对象的类型决定应该激活哪个处理代码.被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那个. 2.执行throw的时候,不会执行跟在throw后面的语句 ...

  9. PHP系列目录

    原文:PHP系列目录 PHP系列的对象是已经熟悉了一门或多门语言的开发人员.如果你是其中一份子,而且你也打算学习PHP,相信你根据本系列会很快掌握PHP的.欢迎大家给出意见或建议.同时也欢迎大家的批评 ...

随机推荐

  1. ehCache浅谈(转)

    ehcache FAQ中提到 Remember that a value in a cache element is globally accessible from multiple threads ...

  2. Unity GUI选择与评价

    因为Unity内建的GUI不管是不是从开发效率或效率强制,因此,许多派生GUI插入,什么插件的选择,是一个非常值它被认为是. 既然是评价,就会有非常多的主观意识,这不一定成为选择的根据. 再比方.我已 ...

  3. Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

    本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力. 首先看一下效果图吧, 原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label ...

  4. Eclipse+Maven创webapp工程

    1.开启eclipse,右键new-->other,例如以下图找到maven project. 选择maven project,点击next 2.选择maven project后.显示创建mav ...

  5. 关于int全区变量读写的原子性

    关于int全区变量读写的原子性     关于int变量的读写是否原子性网上有非常多讨论,貌似不同平台不同,这里自己做实如今arm9平台測试.这里要注意原子性并不是指一条汇编才原子,实际上即使一次赋值编 ...

  6. oracle 10g操作和维护手册

    1.    检查数据库基本状况... 1.1.     检查Oracle实例状态... 1.2.     检查Oracle服务进程... 1.3.     检查Oracle监听状态... 2.    ...

  7. debian 该分区的部分安装移动硬盘后无法识别。

    有一个新的团购1T移动硬盘.购买格化学式ntfs经过几次简单的子区域. 4G硬盘PE.100G高速互动,盈800许多G分为两个相等的存储盘. 到您的计算机USB接口后,, 桌面弹出自己主动4一封信. ...

  8. sql查询第二大的记录(转)

    问题: 数据库中人表有三个属性,用户(编号,姓名,身高),查询出该身高排名第二的高度.建表语句 create table users ( id ,) primary key, name ), heig ...

  9. JNDI数据源配置注意事项

    假设是在原有project上改动 1,applicationContext.xml中改动当中的value值 <bean id="dataSource" class=" ...

  10. shell脚本操作数据库

    #!/bin/bash HOST_NAME="localhost" PORT=3306 USERNAME="root" PASSWORD="root& ...