首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动和PSR-0/PSR-4

自动和PSR-0/PSR-4
EN

Stack Overflow用户
提问于 2014-11-12 01:33:59
回答 1查看 1.3K关注 0票数 1

我,和其他许多人一样,在使用自动加载时和如何使用时遇到了困难。我想我理解composer和PSR-0/PSR-4的概念以及它所需要的目录结构。但是如果我用我自己的MVC框架来构建我自己的项目

  • 现在应该将所有的类文件放在供应商文件夹内的src文件夹中吗?
  • 然后我会编辑作曲家的自动文件吗?
  • 还是我仍然保留原有的结构,只使用我自己的自动发现器? -project -app -core /Main.php -controllers /Controller.php -models /User.php /index.php

既然composer有它自己的自动加载器,它将加载我可能希望包含在我的项目中的所有依赖项,如果我不打算将我的网站变成一个分布式项目,我甚至需要我自己的名称空间吗?我为什么不坚持使用包含/要求呢?

最后,如果我确实采用了命名空间,使用这样的闭包

代码语言:javascript
复制
 function __autoload($class){
    require $class .'.php';
 });

我是否需要在加载类的所有页面中要求autoload.php文件,就像我以前使用的包含/要求那样。以上文件正确吗?我想命名空间应该是

代码语言:javascript
复制
<?php
namespace app\core;  //for Main.php
namespace app\controllers; //for Controller.php

use app\controllers\Controller; //if I call the class
EN

回答 1

Stack Overflow用户

发布于 2014-11-12 02:09:59

在主文件(可能是/var/www/dist/index.php)的开头,您只需包含编写器或您使用的任何自动加载程序。

代码语言:javascript
复制
<?php
if ( file_exists( __DIR__.'/path/to/vendor/autoload.php' ) )
    require __DIR__.'/path/to/vendor/autoload.php';

然后,可以通过使用use语句向文件中使用的类添加快捷方式。

代码语言:javascript
复制
use MyNamespace\Controller\Index,
    MyNamespace\Service\FooService;

use Zend\Foo\Bar;
use Symfony\Baz\Biz;
use Etc\Etc\Etc;

// Refers to \Zend\Foo\Bar
$bar = new Bar;

或者在实例化类时只使用完整的路径。

代码语言:javascript
复制
$bar = new \Zend\Foo\Bar;

要添加您自己的命名空间,只需将其添加到您的composer.json文件中即可。

代码语言:javascript
复制
"autoload" : {
    "psr-4" : {
        "MyNamespace\\" : "src/"
    }
}

打开命令行接口/终端/控制台,并将命名空间添加到自动加载程序中。

代码语言:javascript
复制
# local install of Composer in your project
php composer.php dump-autoload
# or global install and `composer` is in your $PATH
composer dump-autoload

有一条规则:

每个文件一个类

如果您的项目确实是(PSR-0不推荐使用或) PSR-4兼容,那么您不会在一个文件中使用多个namespace。类名(在PSR-4 FIG标准中)定义为

完全限定的类名具有以下形式: \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName> “命名空间前缀”(注意:\是“根”)后面的连续子命名空间名称对应于“基本目录”中的子目录,其中命名空间分隔符表示目录分隔符。

使用以下示例:

代码语言:javascript
复制
+------------------------------+------------------+------------------------+---------------------------------------+
| Fully Qualified Class Name   | Namespace Prefix | Base Directory         | Resulting File Path                   |
+------------------------------+------------------+------------------------+---------------------------------------+
| \Acme\Log\Writer\File_Writer | Acme\Log\Writer  | ./acme-log-writer/lib/ | ./acme-log-writer/lib/File_Writer.php |
+------------------------------+------------------+------------------------+---------------------------------------+
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26877778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档