Maison  >  Article  >  développement back-end  >  Comment implémenter le chargement automatique des classes dans composer en php (explication avec exemples)

Comment implémenter le chargement automatique des classes dans composer en php (explication avec exemples)

不言
不言avant
2019-01-03 10:01:163237parcourir
本篇文章给大家带来的内容是关于php中composer如何实现类的自动加载(示例讲解),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

我们在开发项目中会经常用到第三方的类库插件,但是如果每次需要使用的时候都会在代码的某一处去引入,然后在实例化,这样做感觉很不方便,那么怎么实现自动加载呢,下面简单介绍使用composer实现自动加载:

1、首先需要安装composer
安装地址(中国镜像): https://pkg.phpcomposer.com/#how-to-install-composer
根据它的说明一步一步进行安装

2、安装好composer以后创建一个工作目录,eg:work

3、在项目目录根目录下建立一个composer.json文件,格式如下:(注意必须为空的json格式文件)

{

}

4.打开命令行控制台cmd,进入工作目录work,运行composer命令:

composer install

5.运行后会生成composer文件目录:

- Vendor

 - composer

    - autoload_classmap.php

    - autoload_namespaces.php

    - autoload_psr4.php

    - autoload_real.php

    - autoload_static.php

    ClassLoader.php

    installed.json

    LICENSE

 - autoload.php

- composer.json

6.打开composer.json文件:
共有四种方式:
PSR-0(不推荐使用);
PSR-4;
Class-map;
Files;
下面演示PSR-4实现自动加载:

"autoload": {

   "psr-4": { 
       "src\\": "src/"
    }
}

代码中"命名空间"(不知道命名空间的话,最好先去搜索查一下)习惯为"目录名/文件名"

7.新建src目录,在目录下创建IndexController.php,php文件内容如下:

//设置命名空间
namespace src;
class IndexController
{
    public function index()
    {
        echo 'indexController';
    }
}

8.使用刚创建的IndexController类:
在work根目录创建index.php:

//引入vendor下的autoloas.php
require 'vendor/autoload.php';
//实例化对象
$index = new src\\IndexController();
//调用类中的方法
$index->index();

运行后会出现报错:

class IndexController not fund

打开控制台,进入到work文件目录,运行composer命令:

composer dump-autoload

在运行work下的index.php,不报错误信息说明已经成功实现自动加载了。

9.在work下的index.php文件中我们实例化IndexController类的时,格式为"new src\\IndexController();";
如果命名空间较长的情况下,看起来不太方便,那我们可以用"use"来引入关键字,修改index.php代码如下:

use src\IndexController;

//引入vendor下的autoloas.php
require 'vendor/autoload.php';
//修改后的实例化
$index = new IndexController();
//调用类中的方法
$index->index();

在运行index.php结果和上面一样。
**注意:**在配置完composer.json以后一定要运行"composer dump-autoload"不然会出现class not fund;

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer