【问题标题】:Composer PSR-4 for php fileComposer PSR-4 用于 php 文件
【发布时间】:2017-12-10 06:17:01
【问题描述】:

在我的项目中,我有一个文件夹 lib\custom,其中包含 Web 文件夹和 functions.php 文件。在我的functions.php 中,我有一些函数需要在另一个类中使用,在第一行的这个文件中,我有一个定义的命名空间,如下所示

<?php
namespace Custom;

function abc(){....}

在 Web 文件夹中,我有一些命名空间为 Custom\Web 的类;

在我的composer.json 文件中,我定义的命名空间如下所示

"Custom\\":"lib/custom/"

所以,现在我使用abc() 看起来像这样

use Custom;
$abc = Custom\abc("abc")

但作为回应,我得到了

调用未定义的函数Custom\abc()

我该如何解决这个问题?

【问题讨论】:

  • 如果你说use Custom你不需要再次使用它所以$abc = abc("abc"); 应该可以工作
  • 我已经试过了,但是不行
  • 你试过Custom::abc()吗?
  • 为什么???你认为它会起作用吗?

标签: php namespaces composer-php psr-4


【解决方案1】:

PSR-4 描述了从文件路径自动加载类的规范。它不包括从文件中加载函数。

使用the files autoloader 自动加载每个请求的函数文件。只要您包含自动加载器,这将使您的功能可用:

{
    "autoload": {
        "files": ["lib/custom/functions.php"]
    }
}    

由于您的函数是命名空间的,因此您需要使用 use 语句或使用完全限定名称来导入它们。

如果您的 Web 文件夹包含 PSR-4 兼容类,请像以前一样使用 PSR-4 自动加载器加载它们(您可以在 composer.json 中定义多个自动加载器)。

【讨论】:

  • 如何像以前一样使用 psr-4 自动加载器加载它们?
  • 正如我所说,您不能使用 psr-4 自动加载器加载函数。它仅用于类自动加载。使用 psr-4 加载你的类并使用文件自动加载器加载函数。
猜你喜欢
  • 2014-09-12
  • 2016-03-22
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 2017-02-01
  • 2015-04-20
  • 2017-11-20
  • 1970-01-01
相关资源
最近更新 更多