|
Не рекомендуемый API разбора параметров:
Этот API не рекомендуется использовать. Вместо него имеется новый ZEND API разбора параметров.
После проверки количества аргументов вам необходимо получить доступ к самим
аргументам. Это делается с помощью zend_get_parameters_ex(): zval **parameter;
if(zend_get_parameters_ex(1, ¶meter) != SUCCESS)
WRONG_PARAM_COUNT; |
Все аргументы хранятся в контейнере zval,
на который нужно указать дважды. Показанный код пытается получить
один аргумент и сделать его доступным нам через указатель parameter.
zend_get_parameters_ex() принимает как минимум два аргумента. Первый аргумент это количество получаемых
аргументов (которое должно совпадать с количеством аргументов, с которыми
функция вызывается; именно поэтому важно проверять корректность синтаксиса
вызова). Второй аргумент (и все последующие аргументы) это указатели на указатели на указатели на
zval’ы. (Малопонятно, не правда ли?) Все эти указатели необходимы, поскольку Zend работает внутренне с
**zval; для уточнения местного **zval в нашей функции, zend_get_parameters_ex()
требует указатель на него. return-значением zend_get_parameters_ex() может быть
SUCCESS или FAILURE, указывая на успех или неудачу процессинга аргументов. Неудача чаще всего
связана с некорректным количеством специфицированных аргументов, и тогда вы вы должны выйти с
WRONG_PARAM_COUNT. Для получения более одного аргумента вы можете использовать похожий код: zval **param1, **param2, **param3, **param4;
if(zend_get_parameters_ex(4, ¶m1, ¶m2, ¶m3, ¶m4) != SUCCESS)
WRONG_PARAM_COUNT; |
zend_get_parameters_ex() проверяет только то,
не пытаетесь ли вы запросить слишком много параметров.
Если функция вызывается с пятью аргументами, но вы запросили в zend_get_parameters_ex()
только три, вы получите не ошибку, а первые три параметра. Последующие вызовы
zend_get_parameters_ex() не запросят остальные аргументы, а получать снова те же самые аргументы. | |