Внутренние элементы PHP: разница между макросами INI

Я работаю в базе кода C для расширения PHP. Это расширение определяет несколько php.ini Настройки. Из того, что я видел, есть два макросы, которые делают это. Они есть PHP_INI_ENTRY_EX а также STD_PHP_INI_ENTRY_EX,

PHP_INI_BEGIN()
PHP_INI_ENTRY_EX (...)
STD_PHP_INI_ENTRY_EX (...)
PHP_INI_END()

В чем практическая разница между созданием php.ini настройка с одним макросом против другого? То есть я могу проследить за белым кроликом вниз по макроотверстию и увидеть окончательный C, который генерируется, но я хочу знать, какие различия в поведении / функциональности у разработчика PHP, использующего эти ini настройки увидим.

2

Решение

(следующее мое лучшее предположение о том, как все это работает — исправления приветствуются в комментариях)

STD_PHP_INI_ENTRY а также STD_PHP_INI_ENTRY_EX Макросы позволяют конечному пользователю-программисту создавать настройки ini, значения которых сохраняются в памяти (и, вероятно, могут быть установлены и извлечены с помощью ini_set/ini_get). PHP_INI_ENTRY а также PHP_INI_ENTRY_EX Макросы позволяют конечному пользователю-программисту создавать настройки ini, которые запускают функцию обратного вызова один раз, а затем предпринимают некоторые действия в своей собственной программе / расширении (т.е. устанавливают в своей программе некоторое глобальное состояние ish, не связанное с ini-системой PHP).

_EX версия макроса принять бывшийПараметр tra — этот дополнительный параметр является обратным вызовом, который PHP будет использовать для отображения значения ini в таких местах, как phpinfo, Например, вы можете видеть ldap.maxlinks Ини определение здесь с display_link_numbers Перезвоните. Источник тогда определяет display_link_numbers обратный звонок здесь.

STD_ макросы предназначены для работы с определенным типом объекта / структур состояния. Используя вышеупомянутое ldap.maxlinks Например, три ключевых параметра max_links, zend_ldap_globals, а также ldap_globals,

STD_PHP_INI_ENTRY_EX("ldap.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong,
max_links, zend_ldap_globals, ldap_globals,
display_link_numbers)

Выше, zend_ldap_globals Параметры — это имя определения структуры, настройка с ZEND_BEGIN_MODULE_GLOBALS а также ZEND_END_MODULE_GLOBALS макросы. Вы можете увидеть макросы которые создают zend_ldap_globals определение здесь. Выше max_links Параметр — это поле в этой же структуре.

Наконец, ldap_globals Параметр является экземпляром этой структуры, созданной с помощью PHP_GINIT_FUNCTION макро. Этот макрос позволяет программисту установить глобальный «per-php-запрос» и (я думаю) это память, в которой PHP будет хранить значение ini. Вы можете увидеть Глобальная настройка ldap для каждого запроса здесь.

Когда вы настроили структуру для хранения состояния ini, как описано выше, вы можете использовать набор предопределенных обратных вызовов PHP (OnUpdateLong выше), чтобы эти значения автоматически устанавливались, когда пользователь PHP устанавливает значение через php.ini (или одно из множества других мест PHP ini значение может быть установлено в зависимости от того, какой PHP_INI константа, которую вы передали STD_ макрос (PHP_INI_SYSTEM выше)).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]