不得不说的Composer

3.5.1 composer自动加载:psr-0/4

假设项目中有一个类“Order”,对应的文件为“/app/Library/Order.php”,其命名空间为“App\Library”,且app目录下所有类文件遵循psr-4规范。“Order”类中需要使用到mustache(mustache遵循的是psr-0规范)来渲染内容。现在用composer来实现其自动加载并让代码顺利执行。

  1. 在composer.json文件中增加autoload关键字,最终得到内容:
{
  "require" : {
    "mustache/mustache": "^2.11"
  },
  "autoload": {
    "psr-4": {
      "App\\": "app/"
    }
  }
}

“autoload”关键字声明了自动加载规则,其下内容分为psr-4或psr-0来对应不同的自动加载规范,规范下的内容为“命名空间前缀:目录”,可指定多个命名空间前缀和目录的对应关系。

命名空间前缀应以“\”结尾,目录应以“/”结尾

以上的autoload中的内容,即添加了psr-4规范的自动加载内容,其中“App\”命名空间前缀对应“app/”目录,如“/app/Library/Order.php”类文件对应的命名空间为“App\Library”(Order.php文件在app\Library目录下)。

修改了composer.json的自动加载规则,只需要执行命令

composer dump-autoload

来更新加载器,Order类就可以用了。

psr-0的声明与psr-4类似,只是规范不同而已,此处不再细说,例如:

{
  "autoload" : {
    "psr-0": {
      "Acme\\Util\\": "src/"
    }
  }
}

附: app/Library/Order.php文件内容

<?php
namespace App\Libraries;

use Mustache_Engine;

class Order
{
    public function getPrice ()
    {
        $tpl = new Mustache_Engine();
        return $tpl->render('The price is ${{price}}.',['price' => 100]);
    }
}

index.php文件内容

<?php
require 'vendor/autoload.php';

$order = new \App\Libraries\Order();

var_dump($order);
echo $order->getPrice();

输出内容

  • 没有任何评论
回复 @abc
登录后才可发表评论 | 登录