博主信息
博文 45
粉丝 3
评论 0
访问量 57977
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
Composer常用指令以及自动加载器的使用方式
残破的蛋蛋
原创
1282人浏览过

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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学