PHP 利用spl_autoload_register实现自动加载

本文版权归作者(苦瓜糖水)所有,禁止转载至其他网站,以致污染搜索环境。

 

目录结构:

/autoload.php 

/includes/ClassC.php

/includes/ClassB.php

/includes/ClassA.php

/includes/ClassA/ClassD.php

 

autoload.php文件内容

<?php
header('Content-Type:text/html;charset=utf-8');

spl_autoload_register(function ($class) {
    // 项目特定的命名空间前缀
    $prefix = 'Kongjian';
    // 命名空间前缀的根目录
    $base_dir = __DIR__ . '/includes/';
    // 判断该类是否使用命名空间前缀
    $len = strlen($prefix);
    if (strncmp($prefix, $class, $len) !== 0) return; // 跳转到下一个已注册的自动装载机
    // 获取相应类名
    $relative_class = substr($class, $len);
    // 将名称空间前缀替换为基本目录,将命名空间分隔符替换为相对类名称中的目录分隔符,并附加.php
    $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
    // 如果文件存在,则会引用它
    if (file_exists($file)) require $file;
});
// 调用ABCD四个类的Output方法
Kongjian\ClassA::Output();
Kongjian\ClassB::Output();
Kongjian\ClassC::Output();
Kongjian\ClassA\ClassD::Output();

 

ClassA.php文件内容

<?php
namespace Kongjian;

class ClassA
{
    public static function Output()
    {
        echo '我是类A<hr>';
    }
}

 

ClassB.php文件内容

<?php
namespace Kongjian;

class ClassB
{
    public static function Output()
    {
        echo '我是类B<hr>';
    }
}

 

ClassC.php文件内容

<?php
namespace Kongjian;

class ClassC
{
    public static function Output()
    {
        echo '我是类C<hr>';
    }
}

 

ClassD.php文件内容

<?php
namespace Kongjian\ClassA;

class ClassD
{
    public static function Output()
    {
        echo '我是类D<hr>';
    }
}

 

输出效果

posted @ 2017-05-31 16:52  苦瓜糖水  阅读(98)  评论(0编辑  收藏  举报