PSR-4标准自动加载,composer使用
PSR-4标准自动加载
此案例只是简单的实现一下自动加载
我们用到spl_spl_autoload_register(function($class){});
首先要自动加载的文件命名空间必须按照真实目录进行书写(其次要要实现的自动加载的文件名必须和类名一模一样!)
首先我们先创建一下文件目录(用于存放要被自动加载的文件)
我这边在根目录创建了一个叫xiaoyu
的目录
目录下面有一个叫demo1.php
这个文件
然后文件时如何写的
namespace xiaoyu;
//命名空间是需要和真实目录相同
namespace xiaoyu;
class demo1
{
public static function test() :string
{
return 1;
}
}
echo demo1::test();die;
上面为什么要die掉我会在后面讲解!(纠结了好久我才知道为什么会报错)
接下来我们创建一个自动加载器auto.php
namespace chapter4;
spl_autoload_register(function($class){
//设置项目命名前缀 Demo\test(这边还是得结束目录得整一下'\')
$prefix = 'Demo\test\\';
//设置一下前缀的类名所对应的类的所在目录
$base_dir = __DIR__ . '/xiaoyu/';
//去掉项目前缀获得真实类名称
$real_class = substr($class,strlen($prefix));
// die($real_class);
//将命名空间分隔符,替换成目录分隔符
$path = str_replace('\\',DIRECTORY_SEPARATOR,$real_class);
// die($path);
//拼接文件目录成php文件所以由此得出类名要和文件名一样;
$file = $base_dir . $path . '.php';
//文件是否存在
var_dump(file_exists($file));
file_exists($file) ? require $file:die('文件目录不存在出现错误');
加载器的大致原理就是:将项目命名空间中所需要自动加载的文件更具其命名空间来获取路径。再由调用器的命名空间来组成一个路径
我们用下面这个la.php
来去加载加载器再由加载器去自动加载demo1.php use导入的完全限定名称非常重要!
namespace chapter4;
use Demo\test\demo1;
require 'auto.php';
demo1::test();
接下来我访问la.php文件就会加载出1;
刚刚如果没有die掉
实际上你仔细看会发现是命名空间的问题,导致报错,所以我们直接die掉不让他执行第八行!
Composer使用
# 准备工作: 查看版本,composer要求 php 5.3+
php -v
# 1. 下载composer应用程序
curl -sS https://getcomposer.org/installer | php
# 2. 将composer命令安装到全局, sudo 提权, 需要输入root密码
sudo mv composer.phar /usr/local/bin/composer
# 3. 查看composer版本号, 验证是否安装成功
composer --version
# 4. 设置国内镜像,提升组件下载速度: 以阿里云为例
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
Win的话直接去下载就是了
使用的话可以直接https://packagist.org/ 看即可有手就行demo复制粘贴瞅一瞅就会!
简单的Composer使用就是去下载人家写好的类我们只需要使用就行就如图