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__
 
posted @ 2017-11-10 20:17  Uncle_Jay  阅读(98)  评论(0编辑  收藏  举报