PHP Autoloading — Composer

以前使用 PHP,可能在应用程序中使用 include 或者 require 语句来从其他 PHP 文件引入功能或配置。一般来说,我们希望避免这种情况,因为这样太烦琐而且难以根据路径来判断其依赖关系,使得调试成为一场噩梦。

后来,从 PHP 5 开始引入自动加载(Autoloading)这概念,从最初的 __autoload 到后来的 spl_autoload_register,我们可以根据自己的需求,编写自动加载器,当你的应用程序需要使用一个类时,PHP 知道去哪里寻找它,并在需要时自动加载它,这是一个很酷的用法。

虽然我们可以通过编写自己的自动加载器来完成自动加载任务,但是 Composer 出现改变了这一现状,Composer 是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),帮你安装这些依赖的库文件。

顺应时代前进潮流(本人已经落后了),现在不得不学习一下如何利用 Composer 来构建应用程序的自动加载器。

首先,确保系统上安装了 Composer (参考官网,https://getcomposer.org/)。 然后开始为此项目设置 Composer。

命令行进入项目的目录(如 Windows 使用 cmd 即可),执行:

composer init

根据一个交互式的指引,会帮助你生成一个 composer.json 配置文件。例如,要建立一个 blog 项目:

Package name (<vendor>/<name>) [administrator/composer-test]: myproject/blog (ps: 注意要小写。这括号内的内容只是提示)
Description []: this is a blog
Author [icodechef <dengman2010@gmail.com>, n to skip]: n
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []: project
...

Snipaste_2018-04-03_09-52-33

composer.json 配置文件内容:

{
    "name": "myproject/blog",
    "description": "this is a blog",
    "type": "project",
    "require": {}
}

完成后,在编辑器中打开,并添加 autoload 字段,如下:(这可以确保自动加载器知道去哪里寻找我们的应用程序的类。)

{
    "name": "myproject/blog",
    "description": "this is a blog",
    "type": "project",
    "require": {},
    "autoload": {
        "psr-4": {
            "Blog\\": "src/"
        }
    }
}

PSR-4,为 autoload 规范。
Blog\\   类的 namespace
src/       类的目录

注意:”require”: {}, 后要自己加上 “,”,不然会提示错误。

现在为这个项目安装 composer,它会引入任何依赖关系,并为我们设置自动加载器:

composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files

出现上面的提示表示完成。项目下会出现一个 vendor/ 文件夹,如下图所示:

Snipaste_2018-04-03_09-51-27

在项目目录下新建一个 index.php 文件和 src/ 文件夹,如下图所示:

Snipaste_2018-04-03_09-53-23

在 src/ 目录下添加以下代码的 HelloWorld.php。

<?php

namespace Blog;

class HelloWorld
{
    public function run()
    {
        echo "Hello World!";
    }
}

修改 index.php,代码如下:

<?php

require_once __DIR__ . '/vendor/autoload.php';

$helloWorld = new \Blog\HelloWorld();
$helloWorld->run();

在浏览器中加载您的应用程序以查看消息。

到这里我们成功添加了一个使用 Composer 的项目了。然后我们可以手动修改 composer.json 来更新我们的项目依赖关系。

例如我们可以添加 PHP 版本要求,或者添加修改应用程序的类的路径等:

{
    "name": "myproject/blog",
    "description": "this is a blog",
    "type": "project",
    "require": {
        "php": ">=5.4.0"
    },
    "autoload": {
        "psr-4": {
            "Blog\\": "app/",
            "Framework\\": "src/Framework"
        }
    }
}

执行:

composer update

在浏览器中重新加载您的应用程序以查看新消息!

发表评论

电子邮件地址不会被公开。 必填项已用*标注