PHP_notes_06

■ require 与 include :

require('文件路径');
——用于调用并运行 必须的 文件,若处理失败会导致一个 FatalError 。

include('文件路径');
——用于调用并运行 非必须的 文件,若处理失败会产生一个 warning 。


■ require 与 require_once 的区别:

遇到 require 立即包含文件,而遇到 require_once 会判断是否已经包含过了,如果包含过了就不再包含文件。

使用 require_once 有两个好处:
1. 可以节省资源;
2. 可以避免重复定义的错误。

但 require_once 需要检查已加载的文件,所以效率稍低。

include 与 include_once 的区别同上。

一般情况下,我们最常用的就是 require_once();



■ PHP 的 错误处理 与 异常处理:

一、错误处理:

PHP处理错误的方式:
① 简单的 die() 或 exit() 语句;
② 错误处理器 和 错误触发器;
③ 错误日志;

1. 使用简单的 die() 语句实现,例如:

if(!file_exists("aaa.txt")){
die('文件不存在!');
}else{
}
或:
file_exists("aaa.txt") || die('文件不存在!');


2. 创建错误处理器 和 调用错误触发器:

● 创建错误处理器的一般形式如下:

function 错误处理器名($错误级别,$错误信息){
}

★注意:在使用错误处理器时,系统会自动为其给予指定的参数,其中“错误级别”与“错误信息”这两个参数项为必须项。剩下的可选参数有:
表示发生错误的文件名;
表示发生错误的行号;
一个数组,包含了发生错误的每个变量 和 这些变量的值。

★使用已创建的错误处理器的一般形式如下:

set_error_handler("错误处理器名",错误级别常量);

注意:错误级别常量是系统规定的常量,不要加上引号。

错误级别常量:

常量 描述
2 E_WARNING 非致命的 run-time 错误。
8 E_NOTICE run-time 通知。
256 E_USER_ERROR 致命的,用户生成的错误。
512 E_USER_WARNING 非致命的用户警告。
1024 E_USER_NOTICE 用户通知。
4096 E_RECOVERABLE_ERROR 可捕获的致命错误。
8191 E_ALL 所有错误和警告。


● 使用错误触发器:(用于自定义逻辑上的错误)

例如,输入一个薪水,如果小于3000,我们就认为是个错误,代码如下:

$pay = 2999;
if($pay < 3000){
//调用 错误触发器 :
trigger_error("薪水异常",错误级别常量);
}


3. 错误日志:

默认地,根据在 php.ini 中的 error_log 配置,PHP向服务器的错误记录系统 或 文件发送错误记录。

★通过使用 error_log() 函数,您可以向 指定的文件 或 远程目的地 发送错误记录。

一般使用格式:
error_log($放有错误信息的变量."\r\n",3,"目的地路径");

★输出当前日期和时间:
//默认时区是 UTC ,与我们国家相差8小时。
//设置时区有两种方法:①通过函数设置;②在 php.ini 中设置。

//通过函数设置时区:
date_default_timezone_set("PRC");

//输出日期、时间:
echo date("Y-m-d G:i:s");

在错误日志中增加日期、时间:
date_default_timezone_set("PRC");
error_log("时间是".date("Y-m-d G:i:s")."——".$放有错误信息的变量."\r\n",3,"目的地路径");



二、异常处理:

★这里的‘异常’,指的是开发者自定义的‘异常’,而非语法上的错误。

异常处理用于在开发者规定的‘异常’发生时,改变脚本的正常流程。

基本语法:

try {
// 可能会抛出异常的代码。
}catch(Exception $e){
// 捕获异常,并进行处理。
}
注意:Exception 是所有异常的基类。【?】

$error = new Exception("异常的信息"); //实例化异常类 并 设置“异常信息”。

throw $error; //抛出异常!

例如:
function checkNum($v){
if($v > 100){
throw new Exception("数据过大!"); //实例化异常类 并 抛出异常。
}else{
echo "数据正常";
}
}

try{
checkNum(300);
}catch(Exception $e){
echo $e->getMessage(); //异常类的成员方法之一,作用是返回异常信息。
}


异常类中的成员方法:
getMessage() 作用:返回异常信息。
getCode() 作用:返回异常代码。
getFile() 作用:返回发生异常的文件。
getLine() 作用:返回发生异常的行号。
getTrace() backtrace()数组。
getTraceAsString() 已格式化的 backtrace()数组信息。


注意:
① 通过使用异常处理,可以更有效的控制错误,所以在开发中大量的使用异常处理;
② 当捕获到一个异常后,try{}块里的后续代码不再继续执行,但会继续执行try{}块外的后续代码;
③ 如果发生了一个异常,但是你没有捕获(catch),则系统会提示一个 Uncatched Exception ;
④ 当捕获(catch)到一个异常,你可以处理,也可以不处理,不处理就可以再把它抛出 throw new Exception("……");
例如:

function checkNum($v){
if($v > 100){
throw new Exception("数据过大!"); //实例化异常类 并 抛出异常。
}else{
echo "数据正常";
}
}

try{
checkNum(300);
}catch(Exception $e){
throw $e; //再抛出。
}

⑤ 可以自定义异常类,例如:
class MyException extends Exception {
}

⑥ 可以使用多个 catch{} 代码块来捕获不同种类的异常,例如:

try{
//代码……
}catch(PDO Exception $e){
//第一类异常
}catch(Exception $e){
//第二类异常
}

⑦ 如果没有抛出异常(throw),就捕获不了异常。
⑧ 在设置“异常信息”时 还可以设置“异常代码”,所以我们可以为自己的网站规定一套专用的异常代码,实现代码如下:

// 在实例化异常类时:
throw new Exception('异常信息',异常代码); //异常代码默认为 0 。


● 设置顶层异常处理器:

例如:

//创建一个顶层异常处理器:
function my_exception($e){
echo "我是新的顶层异常处理器。".$e->getMessage();
}

//设置顶层异常处理器:
set_exception_handler("my_exception");

function checkNum($v){
if($v > 100){
throw new Exception("数据过大!"); //实例化异常类 并 抛出异常。
}else{
echo "数据正常";
}
}

try{
checkNum(300);
}catch(Exception $e){
/* 当捕获到异常后,可以继续抛出,这时将会通过 PHP 默认的顶层异常处理器 来进行处理。*/
throw $e; //再抛出。
}



■ 关闭 PHP 中 Warning 级别的提示(即 例如 Warning:………… ):

方法一:
在 php.ini 文件中找到 error_reporting
追加 & ~E_WARNING 例如:error_reporting = E_ALL & ~E_WARNING

方法二:
在你想禁止 Warning 提示的页面中加入下面的代码:
error_reporting(E_ALL ^ E_WARNING);

方法三:
调用函数时,在函数名前面加上 @ ,例如:
$v = @函数名();

如果想 关闭 Notice 级别的提示 只要将上面代码中的 E_WARNING 改为 E_NOTICE 即可。



■ PHP 的 预定义变量(包括 超级全局数组变量):

$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV /* getenv() */


■ PHP 的 魔术方法:

(☆ PHP 的 魔术方法 都是 当某种情况发生时会 自动触发 的方法。)

__construct() 构造方法
__destruct() 析构方法
__call()
__get()
__set()
__clone()
__autoload()
__tostring()
__sleep()
__wakeup()
__isset()
__unset()


■ PHP 的 魔术常量:(可以直接使用)

__FILE__ 代表当前文件的绝对路径。
__LINE__ 代表当前语句的行数。
__FUNCTION__ 代表当前函数。
__CLASS__ 代表当前类。
__DIR__ 代表文件所在的目录,它等价于 dirname(__FILE__) 。
__METHOD__
__NAMESPACE__
__TRAIT__

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值