我正在用C编写一个PHP扩展,我想把我正在创建的类,函数和变量放在命名空间中。我无法在扩展文档中找到有关命名空间的任何内容。要清楚,我想要相当于
namespace MyNamespace{
class MyClass{
}
}
但是在C扩展名中。更具体地说,我在Zend C API中寻找一个函数或宏,它允许我将一个PHP命名空间分配给我用C编写的类或函数。这可能吗?
答案 0 :(得分:8)
将一个类放在命名空间中非常简单。通常你会用
初始化一个类zend_class_entry ce;
INIT_CLASS_ENTRY(ce, "MyClass", my_class_methods);
而是将第二行写为
INIT_CLASS_ENTRY(ce, "MyNamespace\\MyClass", my_class_methods);
命名空间不需要包含在方法声明中或my_class_methods
数组的成员中,以使它们与类正确匹配。
答案 1 :(得分:7)
要在PHP扩展中使用命名空间,基本上只是在类或函数名前面加上一个前缀。
我不是真正的PHP内部开发人员,所以具体细节并不完全清楚我是如何工作的,不幸的是,网上的信息非常非常少,我也可以找到这个(我真的把谷歌通过它的步伐),下面的文章是我能找到的最好的。
然而,似乎这篇文章暗示了正确的解决方案,这似乎是,当您使用Zend引擎/ PHP内部注册该函数时,您可以像"myNS\\MyFunc"
那样注册该函数,然后可以从那里定义了myNS
。我会试着用它来做几个不同的变化,然后看看你能走多远。
您最好的选择是在Freenode上的#php-internals(如果可以获得邀请)或在PHP邮件列表中询问。
如果您设法找到解决方案,互联网似乎需要一篇关于如何实现这一目标的好文章。
来源http://www.php-cpp.com/documentation/namespaces
命名空间只不过是类或函数前缀。如果您希望您的类或函数出现在特定的命名空间中,您只需要在类或函数名称中添加前缀....
更新:我已经更新了我的答案,试图更清楚。对不起,花了这么长时间,我最初在旅行时回复了我的电话,我打算回来并回复你原来的评论,但我真的忘记了这一点,直到我收到SO的关于评论的通知。道歉。