Могу ли я поместить классы расширения 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 о комментариях. Мои извинения.