php __autoload自动加载机制

函数:  __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 ()
          获得已自动加载:
          获得结果如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值