* include_once 和 include 唯一的区分在于 include_once 会搜检文件是不是已引入,假如是则不会反复引入。
spl_autoload_register() 函数是完成自动加载未定义类功用的的主要要领,所谓的自动加载意义就是 我们的new 一个类的时刻必须先include或许require的类文件,假如没有include或许require,则会报错。那如许我们就必须在文件头部写上很多include或require文件,非常贫苦,
为了使得没有include或许require类的时刻也一般new一个类,所以有了自动加载的观点,也就是说new一个类之前不必事前包括类文件也能够一般new,如许我们的文件头部就不必包括很多include(require)。实在这算一种封装!
用spl_autoload_register函数能够完成上面说的功用,我们来看看完成道理。
这个函数的参数以下:
第一个参数:autoload_function
这是一个函数【要领】称号,能够是字符串或许数组(挪用类要领运用)。这个函数(要领)的功用就是,来把须要new 的类文件包括include(requeire)进来,如许new的时刻就不会找不到文件了。实在就是封装全部项目的include和require功用。
第二个参数:throw
此参数设置了 autoload_function 没法胜利注册时, spl_autoload_register()是不是抛出非常。
第三个参数:prepend
假如是 true,spl_autoload_register() 会增加函数到行列之首,而不是行列尾部。
当我们new一个类,而且这个类文件没有被包括时刻就会实行这个autoload_function要领
先来看一个毛病例子:+++++++++++++++++++++
<?php //当我们直接new一个未包括class类文件时刻会报错 $objDemo = new AutoloadClass();
准确的运用 spl_autoload_register() 函数
经由过程下面例子我们能够看到,当new一个未包括的类时刻,会去实行spl_autoload_register第一个参数函数名的函数,这个函数有一个参数就是须要new的类名,这个函数的功用就是把这个类给包括进来(类名和文件名一致),如许就完成了自动加载功用。道理就是如许,不是很庞杂。
<?php // 定义东西类在服务器位置 常量 define('TOOLS_ROOT', __DIR__ . '/'); //文件 autoloadClass.php ,须要new的文件 class AutoloadClass{ public function __construct() { // echo '你已包括我了'; } } //文件autoloadDemo.php文件 spl_autoload_register('myAutoLoad', true, true); function myAutoLoad($className){ $classFileName = TOOLS_ROOT."{$className}.php"; include $classFileName; }
别的,我们能够改成匿名函数来完成:
<?php // 定义东西类在服务器位置 常量 define('TOOLS_ROOT', __DIR__ . '/'); //文件 autoloadClass.php ,须要new的文件 class AutoloadClass{ public function __construct() { // echo '你已包括我了'; } } spl_autoload_register(function ($className) { $classFileName = TOOLS_ROOT."{$className}.php"; include $classFileName; }, true, true); $objDemo = new AutoloadClass();
更多PHP相干学问,请接见ki4网!
以上就是PHP自动加载机制引见——spl_autoload_register()函数,php类自动加载的细致内容,更多请关注ki4网别的相干文章!