博主信息
博文 49
粉丝 2
评论 1
访问量 27341
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
08-05作业:创建一个自动加载类,要有多层命名空间的使用
子傅
原创
1173人浏览过

自动加载类的总结:

1、类文件的目录结构和命名空间的结构,在绝对路径上必须是一一对应关系才可以使自动加载正常使用,原因是因为自动加载是根据类的空间名解析后组合成了文件的绝对目录机构,如果空间名没有和文件机构产生对应关系,自动加载重组的绝对路径名不会成立,不能完成自动加载。

2、类文件完成自动加载后,调用不同命名空间的类方法,仍需要在类方法前加上空间地址+类名+方法名

3、为便于类文件自动加载的快捷使用,可将此功能做成静态类方法,便于后继使用的快速调用。

总结过程中的测试代码如下:

实例

<?php
/**
 * Created by PhpStorm.
 * User: A
 * Date: 2019-08-06
 * Time: 15:52
 * 类的自动加载
 */
namespace _805PHP;

//******************************************************************************
//绝对路径下的类文件引用  一下三个类 命名空间不同,不能正常使用自动加载
include __DIR__."./Test1.php";
include __DIR__."./lib/Test2.php";
include __DIR__."./lib/cc/Test3.php";

// 不同空间 切记需携带命名空间地址
echo Test1::demo1();
echo "<br>";
echo \_802PHP\lib\Test2::demo1();
echo "<br>";
echo \_0803\lib\cc\Test3::demo1();
echo "<hr>";

//********************************************************************************

// ::class 获取类的完整名称,也就是类文件的 文件名
// 输出一下类的类名
//echo \_0804\Test1::class;
//echo "<br>";
//echo \_0803\lib\Test2::class;
//echo "<br>";
//echo \_0802\lib\cc\Test3::class;

echo "<hr>";
echo "<br>";

//$path  = str_replace("\\","/",\Test1::class);
//$path =__DIR__."/".$path.".php";
//echo $path;
//require $path;

//****************************************************************************************
//spl_autoload_register(function($className){
//    $path  = str_replace("\\","/",$className);
//    $path = __DIR__ . "/" .$path.".php";
//    echo $path."<br>";
//    if(file_exists($path)){
//        require $path;
//    }
//});

echo "<hr>";
//引入自动加载类
echo "引入自动加载类 <br>";
require "AutoLoad.php";
//静态调用加载方法
\AutoLoad::autoLoader();



////绝对路径下的类文件引用   三个文件结构 根目录 和空间结构名必须一一对应才可以使用自动加载
//include __DIR__."./Demo1.php";
//include __DIR__."./lib/Demo2.php";
//include __DIR__."./lib/cc/Demo3.php";

echo \Demo1::get().'<br><br>';
echo \lib\Demo2::get().'<br><br>';
echo \lib\cc\Demo3::get();

运行实例 »

点击 "运行实例" 按钮查看在线实例


自动加载 类文件代码:


实例

<?php
/**
 * Created by PhpStorm.
 * User: A
 * Date: 2019-08-06
 * Time: 18:47
 */

class AutoLoad
{
 public static function autoLoader(){
spl_autoload_register(function($className){
    $path  = str_replace("\\","/",$className);
    $path = __DIR__ . "/" .$path.".php";
    //输出调试地址组成是否正确
   // echo $path."<br>";
    if(file_exists($path)){
        require $path;
    }
});
}
}

运行实例 »

点击 "运行实例" 按钮查看在线实例


批改状态:合格

老师批语:你应该用use别名进行空间简化, 这个不影响自动加载
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学