Composer:加载自定义类

时间:2015-12-26 19:46:47

标签: php composer-php

我刚开始使用Composer,但我无法真正掌握如何解决以下问题: 如何设置所以我不必在使用类时使用\ Other \ (即所以我的自定义类的工作方式与Mustache类相似)

此作品

$mustache = new Mustache_Engine();
$foo = new \Other\SimpleClass();

这不起作用

$foo = new SimpleClass();

composer.json

{
  "autoload": {
    "psr-0": {
        "Other": "lib/",
        "Mustache": "lib/"
    }
}
}

文件夹结构

/lib
  /Mustache
  /Other

我已在我的其他文件夹

中的所有文件中输入了namespace Other;

1 个答案:

答案 0 :(得分:0)

  

我该怎么设置所以我不必在使用类时使用\ Other \?

不要争取不使用名称空间。

不使用名称空间只对真正小的脚本有意义,这些脚本独立运行并且不会重用其他供应商(组件/库)的代码片段。

  

我仍然不明白为什么$mustache = new Mustache_Engine();不一定是$mustache = new \Mustache\Mustache_Engine();

Mustache_Engine尚未命名(

)。

他们使用string-prefix-namespace:他们只需将Mustache_添加到类名Engine,以避免类名与其他名为Engine的类冲突。此代码将在旧版和新版PHP上运行。

最后,当Mustache开发人员更新代码以使用命名空间时,它将来\Mustache\Engine。此代码仅在PHP版本上运行,它支持名称空间作为语言功能。

自动加载小胡子

如果您使用Composer

安装了Mustache
{
    "require": {
        "mustache/mustache": "^2.9"
    }
}

然后Composer将自动为Mustache生成自动加载。

您无需向composer.json添加PSR-0指令即可使其正常工作。

如果您手动将Mustache下载并解压缩到/lib文件夹中,则只需设置PSR-0。这是使用依赖项的旧方法 - 改为使用Composer。