凡是过往,皆为序章

0%

PHP基础知识(五)

总结展开PHP中文件加载和错误处理的具体操作。


一、文件加载

1、文件加载的含义

将一个别的文件包含到当前文件中,成为当前文件运行过程中的一部分。通常,一些公共的代码,在多个页面都需要用到的时候,会做成一个独立的文件。然后在不同的页面需要用到的时候,直接载入进来就可以了。

2、文件加载的四种方式

1
2
3
4
5
include '';
include_once '';
require '';
require_once '';
#其中的参数都是加载文件的路径(相对路径或绝对路径)

获取物理路径(绝对路径)的方式:

__DIR__:表示当前文件所在路径,由它可以构建出绝对路径。

getcwd():表示当前正访问的网页路径(当前工作目录),由它也可以构建绝对路径。

四种载入方式:一般来说,如果被载入的文件内容,是后续代码运行的必备前提,则应该使用require载入;如果被载入的文件内容,只需要(或只允许)出现一次,则应该使用“xxx_once”载入。include错误级别低,不会阻止代码运行。

二、错误处理

错误分类

语法错误:运行前出错。

运行时错误:语法没错,执行过程中出错。

逻辑错误:运行结果出错。

常见的错误代号

E_NOTICE: 提示性错误,轻微,继续执行后面程序。

E_WARNING:警告,稍微严重,后面的程序继续执行。

E_ERROR:严重错误/致命错误,后面程序不继续执行。

E_PARSE:语法错误,直接不运行程序。

E_USER_NOTICE,E_USER_WARNING,E_USER_ERROR:用户自定义的提示、警告和严重错误。

E_ALL:它是一个代表“所有”错误的代号。

这些代号都是系统常量。

错误触发

程序本身有错时,运行时会报错提示,但如果程序没错,而不符合预期结果,就可以主动触发一个错误,也就是说主动创建一个错误,E_USER_NOTICE,E_USER_WARNING,E_USER_ERROR等,那么如何触法用户错误呢?

自定义错误触发语法:

1
trigger_error("自定义错误提示内容",自定义错误的代号);

案例演示

1
2
3
4
5
6
7
8
9
<?php
function reg_user($age){
if($age > 120 || $age <0){
trigger_error("年龄不符合规范",E_USER_NOTICE);
}else{
echo "用户资料审核通过!";
}
}
reg_user(150);

错误显示

如果有错误发生(触发了错误),默认情况下会被显示在页面(即输出的结果页面)。

  1. 设置display_errors以决定是否显示错误

    1
    ini_set('display_errors',10);//1表示显示
  2. 设置error_reporting以决定显示那些错误(错误代号:E_NOTICE…)

    1
    ini_set('error_reporting',错误代号1 | 错误代号2 ...)

自定义错误处理

具体做法,分两步:

  1. 声明错误发生时,由我们自己来处理——设定一个错误处理的函数名。
  2. 定义该函数,在函数中详细设定错误的处理情况:怎么显示,显示什么,怎么记录,记录什么。

注意:自定义错误只能处理“非致命错误”。

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

//自定义错误
//set_error_handler("自定义的处理错误的函数的名字");
set_error_handler("my_error_handler");
//定义该函数
function my_error_handler($errCode,$errMsg,$errFile,$errLine){
//参数解释:errCode:错误代码,errMsg:错误信息,errFile:错误文件,errLine:错误行号
//此形参顺序固定,而且是由系统自动调用并传入参数
echo '错误代码:'.$errCode."\n";
echo '错误信息:'.$errMsg."\n";
echo '错误文件:'.$errFile."\n";
echo '错误行号:'.$errLine."\n";
}

echo "v1 = $v1";//未定义的变量
include './no-this-file.php';//打开不存在的文件
l1();//调用未定义的函数
~感谢你请我吃糖果~
-------------本文结束,感谢您的阅读,欢迎评论留言!-------------