【问题标题】:PSR-4 namespaces (am I doing it correct?)PSR-4 命名空间(我做对了吗?)
【发布时间】:2018-02-11 07:18:07
【问题描述】:

我正在努力使自己符合 PSR-4 标准中命名空间的使用。目前我不完全确定我使用它是否正确,所以我请一些聪明的男人/女孩在这里帮助我,如果不是:-)!

- third_party
-- Webservices\
-- Webservice.php
--- Requests\
--- Login.php
--- Responses\
--- Login.php

我正在使用以下命名空间(Composer):

"Webservices\\": "third_party/Webservices"

例如一个请求命名空间:

namespace Webservices\Requests\Login;

对于响应命名空间:

namespace Webservices\Responses\Login;

对于位于Webservices 文件夹中的 Webservice.php 文件,我使用的是命名空间:

namespace Webservices\Webservice;

我不完全确定我是否正确使用了最后一个,但我想不出任何其他方法让它正常工作。

如有任何帮助,或者如果它是正确的,那也太棒了! :-)

【问题讨论】:

  • 您的命名空间根是Webservices,这是您在 composer.json 中定义的。 namespace Webservices\Webservice; 是错误的。 Webservices\WebserviceWebservice class 的完全限定名称
  • 因此,如果我想使用命名空间namespace Webservices\Webservice;,我得到正确的tis,我需要将composer更改为"Webservices\\": "third_party"。但是话又说回来,我不认为命名空间根是正确的,或者是这样吗?因为它不仅适用于 Webservices,该文件夹中还有更多第三方应用程序,还是我需要在 composer 文件中定义它们?
  • 只是不要使用Webservices\Webservice 作为命名空间。如果你这样做了,你最终会得到一个名为Webservices\Webservice\Webservice::class 的类,这在我看来有点荒谬。其他命名空间也是如此。命名空间是文件夹结构,类名是文件名
  • 所以在Webservice.php 中没有定义任何命名空间?我理解正确吗:')? 编辑你在说我们class Webservices\Webservice { }?
  • 最简单的方法就是尝试一下,看看是否有任何自动加载错误

标签: php namespaces psr-4


【解决方案1】:

根据您的目录结构,您的文件应如下所示:

Webservices/Requests/Login.php

namespace Webservices\Requests;

class Login { ... }

Webservices/Responses/Login.php

namespace Webservices\Responses;

class Login { ... }

Webservices\Webservice.php

namespace Webservices;

class Webservice { ... }

【讨论】:

  • 炸弹丢下我在这里做错了什么......我知道......我在我的命名空间中包含了类名,然后它会变得非常混乱。谢谢你的解释!
猜你喜欢
  • 2014-11-12
  • 2011-04-14
  • 2023-04-02
  • 2015-08-23
  • 1970-01-01
  • 2016-07-24
  • 2015-12-01
  • 2015-09-22
  • 2017-01-18
相关资源
最近更新 更多