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