php __autoload自动加载机制
原创
©著作权归作者所有:来自51CTO博客作者wx5b3de736e8e8b的原创作品,请联系作者获取转载授权,否则将追究法律责任
__autoload()
spl_autoload_register()
替代)
作用:类名出错时自调用__autoload()
使用原因:在编写代码的时候会引用很多require或include,这样会造成代码的混乱与重复引用,而自动加载机制能解决该问题
我结合
命名空间和
自动加载来讲解个简单的例子
前言:这里我才用了命名空间对应指定的目录菜单,如我这里Rectangle的命名空间为Controller,这样自动加载的时候目录结构就不会报错。
1)创建目录结构如下:
2)代码
01.php
<?php
/**
* Created by PhpStorm.
* User: Lisam
* Date: 2016/11/14
* Time: 22:34
*/
use Controller\Rectangle as Rectangle; //①引入命名空间
function __autoload($class_name) //②如果错误时,自动加载对应类名
{
$fileName = $class_name . ".class.php";
if(file_exists($fileName)) {
require_once();
echo '__autload class:', $class_name, '<br />';
}
}
$memo = new Rectangle();
$memo->dumpObject();
Rectanle.class.php
<?php
/**
* Created by PhpStorm.
* User: Lisam
* Date: 2016/11/13
* Time: 22:53
*/
namespace Controller;
class Rectangle
{
private $width = 0;
private $height = 0;
public function dumpObject()
{
//获取类名、变量、方法
$class = get_class($this);//找到当前类名
$attributes = get_object_vars($this);
$methods = get_class_methods($this);
//打印信息
echo "<h2>Information about the $class object</h2>";
//打印属性
echo "<h3>Attributes</h3>";
foreach ($attributes as $k => $v) {
echo "<li>$k : $v</li>";
}
echo '</li></ul>';
//打印方法
echo "<h3>Methods</h3>";
foreach ($methods as $v) {
echo "<li>$v</li>";
}
echo '</li></ul>';
}
}
修改:
将__autoload()改为如下:
spl_autoload_register("autoload"); //spl_autoload_register里面使用一个自定义
function autoload($class_name)
{
$fileName = $class_name . ".class.php";
if(file_exists($fileName)) {
require_once($fileName);
echo '__autload class:', $class_name, '<br />';
}
}
其他用法:
spl_autoload_functions
()
获得已自动加载:
获得结果如下: