【发布时间】:2015-11-05 08:42:54
【问题描述】:
我想“命名空间”一组函数并调用它们。原因是我想在多个文件中保持函数名称相同(从而通过名称空间区分它们)。我的以下实现产生 "Call to undefined function..." 错误:
main.php:
//located in /src/main.php
namespace Roles;
use functions\Form; //doesn't seem to work
use functions\View; //doesn't seem to work
use Silex\Application; //works
use Silex\ControllerProviderInterface; //works
class mainfct {
//calls respective functions in the namespaces
Form\a();
Form\b();
View\a();
View\b();
}
form.php:
//located in /src/functions/form.php
namespace Form;
function main() { a(); b();};
function a() {...};
function b() {...};
view.php:
//located in /src/functions/view.php
namespace View;
function main() { a(); b();};
function a() {...not necessarily same code as above...};
function b() {...not necessarily same code...};
上述方法似乎不起作用。实现这一点的最佳方法是什么?
【问题讨论】:
-
你能解释一下
The above doesn't seem to work.是什么意思吗?我们没有一个玻璃球来发现这一点。你有什么错误吗? -
“调用未定义函数”错误。理论上它应该工作吗?
-
你以前用过
use {namespace name here};吗?可能是您不再位于全局名称空间中。尝试在命名空间名称前添加反斜杠。 -
这在 PHP 5.6 php.net/manual/en/language.namespaces.importing.php 中得到了更好的支持。
use function ...。我不确定这是否是您正在寻找的东西。 -
似乎这些更适合作为一个类或组,然后您可以使用继承并使其保持干燥。
$Form->b()和$View->b()而不是\Form\b()和\View\b()之间有什么区别。如果您不想要的实例,请将它们设为静态Form::b()View::b()。
标签: php namespaces silex