Blogger Information
Blog 45
fans 3
comment 0
visits 45545
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Composer常用指令以及自动加载器的使用方式
残破的蛋蛋
Original
947 people have browsed it

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配置项。

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
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