PHP命名空间全局

时间:2012-04-19 15:45:52

标签: php namespaces

有没有办法让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()

3 个答案:

答案 0 :(得分:2)

不是整个命名空间,不是。但是对于单个名字,你可以做到

use p\handle;

aliases p\handle只有handle

答案 1 :(得分:2)

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

  

无法通过use语句导入函数和常量。

来源:

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

答案 2 :(得分:0)

我以为我最近了解到的那样为现代PHP添加答案:

  

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

所以你的第二个代码示例应该可以正常运行。

另外值得一提的是,您可以为PHP命名空间定义块范围though it's discouraged。所以这会奏效:

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

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

    signal('test');
}