主要是去理解“需要自动加载的文件路径必须与该文件中的代码的命名空间一一对应”
作业总结这次主要在自动加载器文件上绕晕了,可能理解角度不对吧,反复看了好多遍,脑子思考了好多遍,磕磕绊绊把效果弄出来,才恍然大悟,其实自动加载器实现的是,传入一个类名得到这个类的绝对路径,然后加上扩展名‘.php’,就实现了:use一个类就能require到这个类文件。从不懂到明白,思维链条好长,明白了就四个字完事:自动加载
代码演示1、自动加载的类
实例
<?php namespace food\fruit; class Apple { public static function myApple() { return __CLASS__ . ':自动加载成功了~'; } } die(Apple::myApple());
运行实例 »
点击 "运行实例" 按钮查看在线实例
2、自动加载文件
实例
<?php namespace food\fruit; spl_autoload_register(function ($class) { // 设置项目前缀 $prefix = 'Food\a\\'; // 设置具有项目前缀的类名所对应的类的基目录 $base_dir = __DIR__ . '/food/'; // 去掉项目前缀,获取真实的类名称 $realClassName = substr($class, strlen($prefix)); // 兼容分隔符 $path = str_replace('\\', DIRECTORY_SEPARATOR, $realClassName); // 加上及目录和php的后缀 $file = $base_dir . $realClassName . '.php'; file_exists($file) ? require $file : die('文件不存在,加载失败!'); });
运行实例 »
点击 "运行实例" 按钮查看在线实例
3、实现自动加载
实例
<?php namespace food\fruit; use Food\a\Apple; require 'autoload.php'; Apple::abc();
运行实例 »
点击 "运行实例" 按钮查看在线实例