Blogger Information
Blog 49
fans 2
comment 1
visits 22336
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
08-05作业:创建一个自动加载类,要有多层命名空间的使用
子傅
Original
1000 people have browsed it

自动加载类的总结:

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

运行实例 »

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


Correction status:qualified

Teacher's comments:你应该用use别名进行空间简化, 这个不影响自动加载
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post