有没有办法临时使用命名空间? 我使用库创建表单并使用名称空间,问题是我通常想在页面中间创建一个表单,因此在全局名称空间中。然后,如果我想调用这个库的任何函数,我必须使用Namespace \
作为前缀在PHP中没有办法做这样的事情:
Blabla global namespace
strlen('test'); // 4
namespace Namespace
{
test();
}
More global PHP
让它引用Namespace \ test?
答案 0 :(得分:3)
http://www.php.net/manual/en/language.namespaces.importing.php
<?php namespace foo; use My\Full\Classname as Another; // this is the same as use My\Full\NSname as NSname use My\Full\NSname; // importing a global class use ArrayObject; $obj = new namespace\Another; // instantiates object of class foo\Another $obj = new Another; // instantiates object of class My\Full\Classname NSname\subns\func(); // calls function My\Full\NSname\subns\func $a = new ArrayObject(array(1)); // instantiates object of class ArrayObject // without the "use ArrayObject" we would instantiate an object of class foo\ArrayObject ?>
这是你能得到的最接近的 - 暂时无法更改默认命名空间。
答案 1 :(得分:0)
我知道这是一个古老的问题,尽管接受的答案按要求回答了该问题,但我感觉OP真正在问的是“我可以使用其他命名空间中的全局命名空间中的项目吗?这里的答案是一个简单明了的答案。
想象两个类(一个在全局名称空间中,另一个在其自身中:
ClassInGlobal.php
<?php
class ClassInGlobal
{
public static function doStuff()
{
echo 'I do some stuff';
}
}
ClassInNamespace.php
<?php
namespace App\Classes;
class ClassInNamespace
{
public function callDoStuff()
{
\ClassInGlobal::doStuff();
}
}
以上执行正常。所需要做的只是指定全限定全局名称空间的斜杠。此外,您可以在名称空间声明之后添加use ClassInGlobal
声明,并省略前斜杠。
这可以通过将命名空间的函数抽象为一个类来转化为原始问题,然后可以稍微修改OP的代码以实现此目的:
require './Namespace/Utilities.php';
Blabla global namespace
strlen('test'); // 4
\Namespace\Utilities::test();
More global PHP
希望能帮助到这里来的人。