PHP(三)-载入文件和错误处理

Posted by Suzeyu on 2016-04-17

自学小笔记

文件加载

基本使用

  1. 有四个文件加载语句: include, require, include_once, require_once
  2. 以上四种使用形式完全一样: 比如: include “要加载的文件路径”或 include(“路径”);
  3. 区别在于加载失败或是否重复加载这种情况,有所不同。

文件加载

举例说明 以include为例其他三种也适用。

  • 相对路径: 相对于当前网页文件所在的位置为起点。主要适用符号./当前路径,../上一级路径。
  • 绝对路径: 本地路径或者网络绝对路径。
  • 无路径 不推荐适用。只给出文件名没有路径。

文件载入和执行过程详解

  • 第一步: 从include语句处退出php脚本模式(进入html代码模式)
  • 第二步: 载入include语句所设定的文件中的代码,并执行之(如同在当前文件中一样)
  • 第三步: 退出html模式重新进入php脚本模式,继续执行之后的代码。

4个载入语句的区别

includerequire的区别:

  • include载入文件失败时(既没有找到该文件),报一个提示错误,然后继续执行后续代码。
  • require载入失败时,报错并立即终止执行
  • 所以通常require用于在程序中,后续代码依赖于载入的文件的时候。

includeinclude_once的区别:

  • include载入的文件不判断是否重复,只要有include语句,就会载入一次。(可能会重复载入)
  • include_once载入的文件会有内部判断机制是否”前面代码”已经再如果,如果再如果,就不能在载入。

在被载入文件中return语句的作用

一个载入语句,如果载入成功,会返回int 1,如果载入失败那么返回false

  1. return语句作用是终止被载入过程–就是return之后的代码不再被执行。
  2. return 也可以作为被载入文件载入时返回的一个数据。

错误处理

错误的分类,通常有三种

  • 语法错误: 程序运行之前,都要先检查语法。如果语法有错误,会立即报错,并且不会去执行程序。
  • 运行时报错: 程序syntax 检测通过。开始运行程序并在此过程中遇到错误。常见有三种:提示性错误,警告性错误,致命错误。
  • 逻辑错误: 程序本身可以正常执行,但没有报错–但计算结果却不对。

错误的分级

php语言中,将各种错误进行了不同级别的分类归纳,并形成大约10几个级别的错误,这就是技术层面的错误分级。

系统常见错误:

  • E_ERROR: 致命错误 例如调用不存在的函数们无法执行之后代码。
  • E_ERANING: 警告性错误 例如引入文件无效,视情况而定代码是否执行
  • E_NOTICE: 提示性错误 例如调用未定义变量,常量 会提示错误并继续执行代码。

用户可自定义的错误:

  • E_USER_ERROR: 自定义致命错误
  • E_USER_WRANING: 自定义警告性错误
  • E_USER_NOTICE: 自定义提示性错误

其他:

  • E_STRICT: 严谨性语法检查错误
  • E_ALL: 代表所有错误

介绍个函数可以填充到想要的位数

str_pad($str1,长度n,$str2,位置w);
//将字符串$str1,用字符串$str2填充到指定的长度n,并且可以指定填充的位置,左填充、右填充。
$result = str_pad($s,16,"0",STR_PAD_LEFT);

自定义触发

语法格式: trigger_error("错误提示内容",E_USER_ERROR); //E_USER_ERROR可以使三种用户代码其中的任意一个。

显示错误报告

  • 设置php.ini文件中的display_errors: on/off 全局
  • 代码中调用 ini_set("display_errors",0); //0为关,1为开

显示哪些级别的错误报告(error_reporting)

  • php.ini文件中 error_repoting
  • 代码中调用 ini_set("error",E_NOTICE|E_WARNING|E_ERROR);

自定义所务处理器

什么叫错误处理器:就是一旦发生错误,用来处理该错误的一种机器–就是一个函数。

自定义错误处理,就是让系统不要去处理错误,而完全由我们队错误进行处理:显示和记录。

  • 第一步设定要处理错误的函数名 set_error_handler("f1");
  • 第二步 定义函数 function f1(){...}