6

PHP 有某种using namespaceC++ 吗?(因此您不必在调用之前编写任何命名空间)

我已经定义了一个函数:

namespace \Project\Library {
   function hello() {

    }

}

其他file.php:

use \Project\Library;

hello();     //> Error: Call to undefined function hello()

PS。

我知道我可以使用use \Project\Library as L;

然后做L\hello();

我也想避免L\

编辑

我自己回答:你做不到。这很糟糕(这是我不喜欢 PHP 的第一件事)。

编辑2

需要明确的是:如果hello()是一个类,我可以直接使用use. 问题在于这是一个简单的函数,所以我必须编写它的命名空间。这是 PHP 的一个小麻烦。

也许我们可以认为这是一个错误并打开一张票?

4

2 回答 2

3

自 PHP 5.3.0 起,它支持语法use ... as

use My\Full\Classname as Another

use也无法直接从手册中猜测(不使用as Another)(手册中未提及)。

您可能可以通过自动加载器使用类工厂或解决方法之类的技巧,但简单直接的答案是“不可能”。:(

于 2012-11-10T18:58:01.350 回答
1

即使 PHP 有命名空间并且可以直接在类之外声明函数,我强烈建议您至少使用静态类方法。然后你就不必乱搞了,并且会使用命名空间,因为它们被设计为可以工作;与类。

这是一个工作示例:

你好.php

<?php

namespace Project\B;

class HelloClass {
    static function hello() {
        echo "Hello from hello.php!";
    }
}

一个.php

<?php

namespace Project\A;

require('hello.php');  // still have to require the file, unless you have an autoloader

use \Project\B\HelloClass;   // import this class from this namespace

\Project\B\HelloClass::hello();   // calling it this way render the 'use' keyword obsolete

HelloClass::hello();  // or use it as it is declared

**注意**:use foo as bar;让我们重命名类!例如 :

use \Project\B\HelloClass as Foo;   // import this class from this namespace as Foo

Foo::hello();   // calling it this way using the 'use' keyword and alias

** 更新 **

有趣的是,您可以这样做:

c.php

namespace Project\C;


function test() {
    echo "Hello from test!\n";
}

一个.php

use \Project\C;             // import namespace only
use \Project\C as Bar;      // or rename it into a different local one

C\test();        // works
Bar\test();      // works too!

因此,只需编写use Project\Library as L;和调用L\hello();. 我认为这是你最好的选择。

于 2012-11-10T19:12:11.990 回答