PHP

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");

自动加载:

# 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 相比区别是:

  1. SPL函数很丰富,提供了更多功能,如spl_autoload_unregister()注销已经注册的函数,
    spl_autoload_functions()返回所有已经注册的函数等
  2. 可以按需多次写spl_autoload_register注册加载函数,加载顺序按谁先注册谁先调用。__aotuload由于是全局函数只能定义一次,不够灵活
  3. 无法成功注册时, spl_autoload_register()可以抛出异常

spl_autoload_register 和 spl_autoload_call 区别:
spl_autoload_register 有回调, spl_autoload_call 只能指定类名传入

上一篇 下一篇

猜你喜欢

热点阅读