| ||||||||||
Запрос аргументов
Разбор параметров это самая распространённая и утомительная операция. Было бы удобно также иметь стандартизованную проверку ошибок и механизм сообщений. Начиная с PHP 4.1.0, имеется способ делать всё это с помощью нового API разбора параметров. Он значительно упрощает процесс получения параметров, но недостаток его в том, что он не может использоваться в функциях, ожидающих переменное количество параметров. но поскольку большинство функций не входят в эту категорию, этот API разбора рекомендуется как новый стандартный способ. Прототип функции разбора параметров таков:
Первый аргумент этой функции это количество реально переданных функции параметров, так что ZEND_NUM_ARGS() может использоваться здесь. Второй параметр всегда должен быть макросом TSRMLS_CC. Третий аргумент это строка, специфицирующая количество и типы аргументов, ожидаемых вашей функцией, аналогично тому, как строка форматирования printf специфицирует количество и формат выводимых значений, с которыми она должна работать. И, наконец, остальные аргументы это указатели на переменные, которые должны принимать значения от параметров. zend_parse_parameters() выполняет также, где возможно, конвертацию типов, так что вы всегда получаете данные в том формате, который запросили. Любой скалярный тип может быть конвертирован в другой, но конвертация между сложными типами (массивами, объектами и ресурсами) и скалярными типами не допускается. Если параметр может быть успешно получен и в процессе конвертации не было ошибок, функция возвратит SUCCESS, иначе - FAILURE. Функция выводит информативные сообщения об ошибках, если количество полученных параметров не совпадает с запрашиваемым количеством или если конвертация типов не может быть выполнена. Вот некоторые примеры сообщений об ошибках:
Естественно, каждое сообщение об ошибке сопровождается именем файла и строкой, в которой ошибка возникла. Вот полный список спецификаторов типов:
Лучше всего показать работу этой функции на примерах:
Обратите внимание, что в третьем примере мы передаём 3 для числа принимаемых получаемых параметров вместо ZEND_NUM_ARGS(). Это позволяет получать наименьшее количество параметров, если наша функция ожидает их переменное количество. Разумеется, если вы хотите работать с остальными параметрами, вы должны использовать zend_get_parameters_array_ex() для их получения. Функция-разборщик имеет расширенную версию, которая имеет дополнительный аргумент flags, управляющий её работой.
Единственный флаг, который в настоящее время можно передавать, это ZEND_PARSE_PARAMS_QUIET, который указывает функции не выводить никаких сообщений об ошибках в ходе операции. Это можно использовать в функциях, которые ожидают несколько наборов совершенно разных аргументов, но вам придётся самостоятельно выводить сообщение об ошибке. Например, вот как можно получить набор из трёх long или строку:
С помощью рассмотренных способов получения параметров функцией вы должны были получить хорошее представление об этом процессе. Дополнительные примеры см. в исходном коде расширений, которые поставляются с PHP - они иллюстрируют каждый представленный случай. | ||||||||||
|