博客列表 >Composer常用指令以及自动加载器的使用方式

Composer常用指令以及自动加载器的使用方式

残破的蛋蛋
残破的蛋蛋原创
2021年03月05日 13:45:43946浏览

Composer常用指令以及自动加载器的使用方式

一、Composer常用指令

  • composer install: 安装 composer.josn 中的依赖;
  • composer update: 更新依赖,后面可以跟上包名,指定更新哪个包;
  • composer selfupdate: 更新 composer 版本;
  • composer require: 添加依赖到 composer.json 中;
  • composer create-project: 安装项目。

二、自动加载器的使用方式

2.1 传统的类引用方式

我们在使用一个类的时候,传统方式是需要先引入这个类文件,再进行使用。下面是一个传统方式操作类。

首先我们在创建两个类文件:UserController .phpOrderController.php,将这两个文件放在application/controllers目录下。

  • UserController .php 文件
  1. namespace app\controllers;
  2. class UserController
  3. {
  4. public function index()
  5. {
  6. return __METHOD__;
  7. }
  8. }
  • OrderController.php文件
  1. namespace app\controllers;
  2. class OrderController
  3. {
  4. public function index()
  5. {
  6. return __METHOD__;
  7. }
  8. }

再创建一个demo.php的文件与application目录同级,我们在这个文件里面别分调用上述创建的两个类文件的index()方法。

  1. namespace edu;
  2. // ---------------------------------------------------
  3. // 以下是传统方式访问
  4. require 'application/controllers/UserController.php';
  5. require 'application/controllers/OrderController.php';
  6. // ---------------------------------------------------
  7. use app\controllers\UserController;
  8. use app\controllers\OrderController;
  9. $user = new UserController;
  10. echo $user->index();
  11. echo '<hr>';
  12. $order = new OrderController;
  13. echo $order->index();
  • 结果:

传统方式引入类

这样操作对于一两个类文件还行,如果一旦文件多了的话,那么这样的操作就变得非常繁琐了,因此我们可以利用composer的自动加载来实现。那么,具体是如何实现,可以按照以下步骤来操作。

2.2 利用composer自动加载类

2.2.1 创建composer文件

首先,在application同级目录下创建一个composer.json文件,里面内容留空。

  1. {}

然后在命名行进入到项目的根目录下,执行composer install命令。

创建composer.json文件

执行完composer install命令之后,会自动生成一个composer.lock的锁文件,还有一个vendor目录。

  • composer.lock 文件

锁文件

  • vendor 目录

vendor

在生成的vendor目录下,我们主要通过加载autoload.php文件来实现类的自动加载。

2.2.2 实现类自动加载

在生成了相关的composer目录和文件之后,我们在composer.json中配置需要加载的类的映射。有三种方法可以自动加载类,下面一一举例。

1.文件级(files):需要将加载的文件逐个导入

此时composer.json中的配置应该这样写:

  1. {
  2. "name": "vendor/demo",
  3. "description": "This is a autoload demo",
  4. "autoload": {
  5. "files": [
  6. "application/controllers/UserController.php",
  7. "application/controllers/OrderController.php"
  8. ]
  9. }
  10. }

注意:在配置完json文件之后,必须要在命令行执行一下composer dump-autoload命令更新composer.json中的autoload配置项。

  • 调用方法
  1. namespace edu;
  2. // ---------------------------------------------------
  3. // 以下是传统方式访问
  4. // require 'application/controllers/UserController.php';
  5. // require 'application/controllers/OrderController.php';
  6. // ---------------------------------------------------
  7. // 如果我们有多个类文件需要导入,这样加载太麻烦,可以利用composer的自动加载来实现。
  8. // 引入 ` vendor/autoload.php `文件即可导入所需的类。
  9. require 'vendor/autoload.php';
  10. use app\controllers\UserController;
  11. use app\controllers\OrderController;
  12. $user = new UserController;
  13. echo $user->index();
  14. echo '<hr>';
  15. $order = new OrderController;
  16. echo $order->index();

我们通过配置需要导入的类的路径,将需要加载的逐个导入,但是这里也有个很大的问题,就是如果我们需要100个类,那么就必须导入100次,这样,问题又跟传统的加载方式一样了,所以这个方法是不可取的。

2.目录级(classmap):类目录的映射

此时composer.json中的配置应该这样写:

  1. {
  2. "name": "vendor/demo",
  3. "description": "This is a autoload demo",
  4. "autoload": {
  5. "classmap": [
  6. "application/controllers"
  7. ]
  8. }
  9. }

将需要导入的类的文件夹做一个映射,代码中的application/controllers意思就是导入该文件夹下的所有类文件,调用方法同上。

3.空间级(psr-4):命名空间映射到目录

此时composer.json中的配置应该这样写:

  1. {
  2. "name": "vendor/demo",
  3. "description": "This is a autoload demo",
  4. "autoload": {
  5. "psr-4": {
  6. "app\\": "application\\"
  7. }
  8. }
  9. }

使用这种方法自动加载的时候,在配置命名空间时必须带上命名空间分隔符\,否则会报错。


最后需要说的一点是,以上三种方法,无论是哪一种,最后都要执行一下composer dump更新composer.json中的autoload配置项。

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