​__autoload()​​  

​spl_autoload_register()​​  替代)

作用:类名出错时自调用__autoload() 

使用原因:在编写代码的时候会引用很多require或include,这样会造成代码的混乱与重复引用,而自动加载机制能解决该问题


我结合 命名空间自动加载来讲解个简单的例子

前言:这里我才用了命名空间对应指定的目录菜单,如我这里Rectangle的命名空间为Controller,这样自动加载的时候目录结构就不会报错。


1)创建目录结构如下:

php __autoload自动加载机制_自动加载



          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 ()

          获得已自动加载:


          获得结果如下:

php __autoload自动加载机制_自动加载_02