5

有没有办法让 PHP 命名空间允许在命名空间内调用函数,就好像它们是全局的一样?

例子:

handle()

而不是:

prggmr\handle()

这是我的示例代码:

<?php
require_once 'prggmr/src/prggmr.php';

prggmr\handle(function() {
  echo 'This is a test scenario';
}, 'test');

prggmr\signal('test');

别名不适用于函数:

<?php
require 'prggmr/src/prggmr.php';
use prggmr\handle;

handle(function(){
    echo "Test";
}, "test");

结果:

Fatal error: Call to undefined function handle()
4

3 回答 3

2

不是整个命名空间,不。但是对于单个名称,您可以

use p\handle;

别名p\handlejust handle

于 2012-04-19T15:48:19.007 回答
2

据我了解,文档中的这段摘录说这是不可能的......

函数和常量都不能通过 use 语句导入。

来源:

http://www.php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.nofuncconstantuse

于 2012-04-19T17:16:10.790 回答
0

以为我会为现代 PHP 添加一个答案,因为我最近了解到:

在 PHP 5.6 之前,函数和常量都不能通过 use 语句导入。自 PHP 5.6 起,允许使用别名或导入函数和常量名称。

因此,这些天您的第二个代码示例应该可以正常工作。

还值得一提的是,您可以为 PHP 命名空间定义块作用域,尽管不鼓励这样做。所以这会起作用:

<?php
require_once 'prggmr/src/prggmr.php';

namespace prggmr {
    handle(function() {
      echo 'This is a test scenario';
    }, 'test');

    signal('test');
}
于 2017-03-11T18:33:41.567 回答