【php】基础学习5
主要包括PHP的错误、异常处理和调试。具体如下:
1 <html xmlns=http://www.w3.org/1999/xhtml> 2 <head> 3 <meta http-equiv=Content-Type content="text/html;charset=utf-8"> 4 </head> 5 <body> 6 <?php 7 /* 8 * PHP的错误、异常处理和调试 9 */ 10 11 /* 12 * 常见的错误类型: 13 * ① 语法错误 14 * ② 逻辑错误 15 * ③ 未定义错误 16 * ④ 环境错误 17 * ⑤ 运行错误 18 */ 19 20 /* 21 * 错误处理函数 22 * 在php中,可以使用trigger_error()函数来出发自定义的错误信息函数 23 * bool trigger_error(sring $error_msg [, int $error_type]) 24 * error_msg是自定义错误提示信息;error_type是自定义错误类型,值为错误 25 级别中的常量,默认值为E_USER_NOTICE。 26 */ 27 $divisor=0; 28 $divided=10; 29 if($divisor!=0){ 30 echo "ff"; 31 }else{ 32 //trigger_error('除数不可以为零!',E_USER_ERROR); 33 } 34 35 /* 36 * 自定义错误页面 37 * 可以使用header()函数或include()函数来进一步实现错误页面的页面跳转或引用 38 */ 39 $divisor=0; 40 $divided=10; 41 if($divisor!=0){ 42 echo "ff"; 43 }else{ 44 //include './base.php'; //前提是要有这个错误页面 45 } 46 47 /* 48 * include()函数之再学习 49 * include语句包含并运行指定文件。 50 * include和require基本完全相同,除了返回的错误类型。 51 在文件未找到时include会发出一条警告;而require会发出一个致命的错误 52 * 当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。 53 从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。 54 不过所有在包含文件中定义的函数和类都具有全局作用域。 55 * 例1:基本的include例子 56 vars.php 57 <?php 58 $color = 'green'; 59 $fruit = 'apple'; 60 ?> 61 test.php 62 <?php 63 echo "A $color $fruit"; // A 64 include 'vars.php'; 65 echo "A $color $fruit"; // A green apple 66 ?> 67 * 例2:函数中的包含 68 如果 include 出现于调用文件中的一个函数里, 69 则被调用的文件中所包含的所有代码将表现得如同它们是在该函数内部定义的一样。 70 所以它将遵循该函数的变量范围。此规则的一个例外是魔术常量,它们是在发生包含之前就已被解析器处理的。 71 <?php 72 function foo(){ 73 global $color; 74 include 'vars.php'; 75 echo "A $color $fruit"; 76 } 77 foo(); // A green apple 78 echo "A $color $fruit"; // A green 79 ?> 80 */ 81 82 /* 83 * 错误日志 84 * (1)初始化PHP日志工具 85 有些常量是使用openlog(),closelog()和syslog()函数时所必须的,其形式为: 86 void define_syslog_variables(void) 87 使用日志函数之前需要先执行此函数、 88 * (2)打开日志连接 89 bool openlog ( string $ident , int $option , int $facility ) 90 ident为增加到每一项的消息标示符 91 option确定生成消息时使用了哪些日志选项 92 facility指明记录日志的程序的类型。 93 * (3)关闭日志连接 94 int closelog(void); 95 * (4)向日志目标发送消息 96 syslog()函数负责向syslog发送一条定制信息。其形式为: 97 int syslog(int priority,string message); 98 priority指定syslog优先级,表示严重程度 99 message指定要记录的文本消息 100 * 例: 101 define_syslog_variables(); 102 openlog("PHP5",LOG_PID,LOG_USER); 103 syslog(LOG_WARNING,"This is knife's blog!"); 104 closelog(); 105 以上代码将在message_syslog文件中生成类似下面的一条日志: 106 Dec 5 20:43:06 PHP5[30326]:This is knife's blog! 107 */ 108 109 /* 110 * PHP的基本异常类exception 111 * exception类的构造方法需要传入两个参数:错误信息和错误代码 112 * 除了构造方法,exception类还提供如下的内置方法: 113 ① getMessage():返回传递给构造函数的信息 114 ② getCode():返回传递给构造函数的代码 115 ③ getFile():返回产生宜昌代码文件的完整路径 116 ④ getLine():返回代码文件中产生代码的行号 117 ⑤ getTrace():返回一个包含产生异常代码回退路径的数组 118 ⑥ getTraceAsString():返回一个包含产生异常代码回退路径的数组,该信息降本格式化成一个字符串 119 ⑦ __toString():显示一个exception对象,并且给出以上所有方法提供的信息,可以重载。 120 */ 121 122 /* 123 * try、throw和catch 124 * try:使用的异常函数应该位于try代码内 125 * throw:规定如何触发异常。每个throw必须至少对应一个catch 126 * catch代码块会捕获异常,并创建爱你一个包含异常信息的对象 127 */ 128 129 /* 130 * 创建自定义的exception类 131 * 该类必须是exception类的一个扩展 132 */ 133 134 /* 135 * 设置顶层异常处理器 136 * set_exception_handler()函数可设置处理所有未捕获异常的用户自定义函数 137 * 代码如下: 138 <?php 139 function myException($exception){ 140 echo "<br/>Exception:",$exception->getMessage(); 141 } 142 set_exception_handler('myException'); 143 throw new Exception('Uncaught Exception occurred.'); 144 ?> 145 输出:Exception: Uncaught Exception occurred 146 */ 147 148 /* 149 * 异常的规则 150 *① 需要进行异常处理的代码应该放在'try'代码块内,以便捕获潜在的异常 151 *② 每个try或throw代码块都必须至少拥有一个对应的catcha代码块 152 *③ 使用多个catch代码块可以捕获不同种类的异常 153 *④ 可以再try代码块内的catcha代码块中再次抛出(re-thrown)异常 154 *⑤ 如果抛出了异常,就必须捕获它 155 */ 156 ?> 157 </body> 158 </html>