Могу ли я поместить классы расширения PHP, функции и т.д. В пространство имен?
Я пишу PHP-расширение в C, и я хотел бы поместить классы, функции и переменные, которые я создаю в пространстве имен. Я не смог найти что-либо в документации по расширению пространства имен. Чтобы быть ясным, я хочу эквивалент
namespace MyNamespace{
class MyClass{
}
}
но в расширении C. В частности, я ищу функцию или макрос в API Zend C, который позволяет мне присваивать пространство имен PHP классу или функции, которые я написал на C. Возможно ли это?
Ответы
Ответ 1
Помещение класса в пространство имен очень просто. Если вы обычно инициализируете класс с помощью
zend_class_entry ce;
INIT_CLASS_ENTRY(ce, "MyClass", my_class_methods);
вместо этого напишите вторую строку как
INIT_CLASS_ENTRY(ce, "MyNamespace\\MyClass", my_class_methods);
Пространство имён не должно быть включено в объявления метода или в члены массива my_class_methods
, чтобы правильно сопоставить их с классом.
Ответ 2
Чтобы использовать Пространства имен в расширениях PHP, вы в основном просто устанавливаете префикс перед именем класса или функции.
Я не разработчик внутренней среды PHP, поэтому мне не совсем ясно, насколько это работает, к сожалению, очень мало информации в Интернете, что я мог бы найти об этом (я действительно поместил Google через это), а статья ниже - лучшее, что я мог найти.
Однако, похоже, в этой статье намекает на правильное решение, которое, похоже, заключается в том, что когда вы регистрируете функцию с помощью внутренних движков Zend/PHP, вы делаете это так, как "myNS\\MyFunc"
, и затем она должна быть доступна из myNS
. Я бы попробовал несколько разных вариантов с этим и посмотрел, как далеко это вас доставит.
Ваш лучший вариант - спросить в # php-internals на Freenode (если вы можете получить приглашение) или в списке рассылки PHP.
Если вам удастся найти решение, Интернет, похоже, нуждается в хорошей статье о том, как это можно сделать.
Источник http://www.php-cpp.com/documentation/namespaces
Пространство имен - это не что иное, как префикс класса или функции. Если вы хотите, чтобы ваши классы или функции отображались в определенном пространстве имен, вам просто нужно добавить префикс к имени класса или функции....
Обновление: Я обновил свой ответ, чтобы попытаться быть более ясным. Мне жаль, что это заняло так много времени, я изначально отвечал с моего телефона, когда я путешествовал, с каждым намерением вернуться и ответить на ваш оригинальный комментарий, но я искренне забыл об этом, пока не получил уведомление от SO о комментариях. Мои извинения.