PHP自动加载机制
引入文件的方法,有require和include函数;
1.require 和 include 几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止而 include 只产生警告(E_WARNING),脚本会继续运行;
2.require_once和include_one仅判断是否重复引入
在项目需要大量引入各种文件的时候,就比较繁琐,效率比较低,维护更是很困难;
我们可以使用 spl_autoload_register() 函数引入自己编写的自动加载类;下面先贴上代码
<?php
class Loader
{
public static $vendorMap = array(
'designcode' => __DIR__.DIRECTORY_SEPARATOR.'designcode',
);
/**
*自动加载器
*/
public static function autoload($class)
{
$file = self::findFile($class);
if(file_exists($file)){
self::includeFile($file);
}
}
/**
*解析文件路径
*/
private static function findFile($class)
{
$vendor = substr($class,0,strpos($class,'\\'));//顶级空间命名
$vendorDir = self::$vendorMap[$vendor];
$filePath = substr($class,strlen($vendor)).'.php';//文件相对路径
return strtr($vendorDir.$filePath,'\\',DIRECTORY_SEPARATOR);
}
/**
*引入文件
*/
private static function includeFile($file)
{
if(is_file($file)){
include $file;
}
}
}
在写完加载后,在使用的页面使用函数注册就可以,或在入口脚本引入文件
include 'Loader.php';
spl_autoload_register('Loader::autoload');//注册自动加载
$factory = new \designcode\factory1\Factory();