【问题标题】:use function doesn't import functions in PHP使用函数不会在 PHP 中导入函数
【发布时间】:2019-01-03 23:05:14
【问题描述】:

无法使用PHP.net 中描述的use function 关键字导入函数。在本地重新创建示例将返回 PHP Fatal error: Uncaught Error: Call to undefined function


composer.json

{
    "autoload": {
        "psr-4": {
            "My\\": ""
        }
    }
}

full.php

<?php

namespace My\Full;

function functionName()
{
    echo 'Hello Stackoverflow';
}

index.php

<?php

require 'vendor/autoload.php';

use function My\Full\functionName as func;

func();

注意:我知道我可以要求该文件,但我想知道是否可以不这样做。

【问题讨论】:

  • 您需要查看“auto loaders”。见SPL,也可以看看:php-fig.org/psr/psr-4
  • @ficuscr 这个自动加载器是否相关?使用这里描述的函数php.net/manual/en/language.namespaces.importing.php专门使用use function语法
  • 您告诉作曲家 My 命名空间对应于您项目的根目录。因此,根目录中的任何类都应该在 My 命名空间中;不在 My\Full 命名空间中。如果Full.php(大写F)定义了一个类Full,它可以被自动加载。对于函数,我猜是一样的。
  • @minitauros php.net/manual/en/language.namespaces.importing.php 专门使用 use function My\Full\functionName as func; 导入函数,从 PHP5.6 开始就可以使用,除非我解释不正确。
  • 在 PHP 命名空间的上下文中使用单词 importing 会造成混淆。会说是的,它与自动装载机有关。

标签: php function namespaces composer-php autoload


【解决方案1】:

use function 不包含任何文件或函数定义,它只是为一个完全限定的函数名称加上别名,这意味着当您调用函数时不需要指定命名空间。

在您的示例中,您使用的是非常适合自动包含文件的作曲家,但是来自https://www.php-fig.org/psr/psr-4/ PSR-4 是

从文件自动加载类的规范 路径

它不会自动加载不符合本规范的函数或文件。

但是,您可以使用 composer 自动包含此类情况下的文件。你需要更新你的 composer.json 然后运行composer dumpautoload

composer.json

{
    "autoload": {
        "files": ["full.php"]
    }
}

然后你的其余部分保持不变,它应该可以工作。

【讨论】:

  • 那么use function的用途是什么,会在什么情况下使用呢?
  • 使用函数只是意味着您在调用函数时不需要使用完全限定的命名空间。你给它一个别名。见php.net/manual/en/language.namespaces.importing.php
  • 你会怎么用,能给我一个代码例子吗?
  • 您可以完全按照您的方式使用它,但您需要手动包含或要求包含函数定义的文件,或者如果您正在使用 Composer,您可以将文件注册为包含vendor/autoload.php 时自动包含。我现在在手机上。我明天可以更新我的答案并提供更多详细信息
猜你喜欢
  • 2011-01-28
  • 2021-07-24
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 2018-09-22
  • 2021-06-10
相关资源
最近更新 更多