php 四种引入 && 自动加载
2018-08-20 本文已影响13人
X1_blog
四种引入方式:include / require / include_once / require_once
include && require 区别:
对于不存在的文件, include 警告, require 抛出致命错误, 脚本中止
include && include_once 区别:
include_once()函数的作用与include相同,不过它会首先验证是否已经包含了该文件; 如果已经包含,则不再执行include_once。否则,则必须包含该文件; 除了这一点与include完全相同
利用函数快速引入:INCLUDE_PATH 内 存放引入文件, 引入的时候无需指明路径
demo:
defined(PATH,"./");
set_include_path(PATH);
include_once("response.php");
自动加载:
- spl_autoload_register()
- spl_autoload_call()
- __autoload() 在以后的版本中它可能被弃用,不建议使用
原理: 此函数触发的条件是脚本中调用了未定义的类, 在函数内部获得变量$class为不存在类的类名 , 在函数体内执行文件引入即可
# response.php
class response {
function doPrint() {
echo 'hello world';
}
}
__autoload 简单demo:
# index.php
function __autoload( $class ) {
$file = $class . '.php';
if ( is_file($file) ) {
require_once($file);
}
}
$obj = new response();
$obj->doPrint();
执行结果: 返回"hello world"
spl_autoload_register() 简单demo:
# index.php
spl_autoload_register(function ($class_name) {
require_once $class_name . '.php';
});
$obj = new response();
$obj->doPrint();
执行结果: 返回"hello world"
spl_autoload_call() 简单demo
# index.php
spl_autoload_call("response");
$obj = new response();
$obj->doPrint();
执行结果同上
__autoload 和 spl_autoload_register 相比区别是:
- SPL函数很丰富,提供了更多功能,如spl_autoload_unregister()注销已经注册的函数,
spl_autoload_functions()返回所有已经注册的函数等 - 可以按需多次写spl_autoload_register注册加载函数,加载顺序按谁先注册谁先调用。__aotuload由于是全局函数只能定义一次,不够灵活
- 无法成功注册时, spl_autoload_register()可以抛出异常
spl_autoload_register 和 spl_autoload_call 区别:
spl_autoload_register 有回调, spl_autoload_call 只能指定类名传入