博客列表 >08-05作业:创建一个自动加载类,要有多层命名空间的使用

08-05作业:创建一个自动加载类,要有多层命名空间的使用

子傅
子傅原创
2019年08月06日 19:01:161009浏览

自动加载类的总结:

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;
    }
});
}
}

运行实例 »

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


上一条:mvc-0806下一条:0805作业
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议