Новые книги

Это книга о русской блогосфере, написанная как документальный роман-френдлента. Ее герои — самые известные, яркие и успешные блогеры Рунета: Антон Носик, Рустем Адагамов, Артемий Лебедев, Линор Горалик, Марта Кетро, Максим Кононенко, Сталик Ханкишиев, Вера Полозкова — восемь человек, которые стали такими, какие они есть, во многом благодаря интернету и которые сделали интернет таким, каким мы знаем его сегодня. Эти восемь человек — во всех смыслах первые лица русской блогосферы — рассказывают о том, как открыли для себя Всемирную паутину, как обустроили ее и приспособили для жизни. Нам, читающим эту френдленту, решать, как в ней жить сегодня.
Электронные рассылки как маркетинговый инструмент имеют свои особенности: обычно широкий охват, но не всегда высокий отклик: часто их даже не читают. Что можно сделать, чтобы повысить интерес к вашей рассылке? Где взять нужную базу подписчиков? Как оформить подписную страницу? Каким образом выстроить серию писем, информирующих о конкретной акции и побуждающих к действию, чтобы все сработало в нужный момент? Здесь вы найдете ответы известного специалиста по е-mail маркетингу.

Если вам нужно добиться максимальной эффективности электронной рассылки, вы правильно выбрали книгу.

Приём Аргументов

Учебник РНР
Назад Вперёд

Глава 33. Приём аргументов

Содержание
Определение количества аргументов
Запрос аргументов
Старый способ запроса аргументов (не рекомендуется)
Работа с переменным количеством аргументов/параметров-опций
Доступ к аргументам
Работа с аргументами, передаваемыми по ссылке
Гарантирование безопасности записи/Write Safety других параметров.

Одним из важнейших вопросов для расширений языка является приём и обработка данных, переданных через аргументы. Большинство расширений сконструированы для работы со специфическими данными ввода (или требуют параметров для выполнения своих специфичных акций), и аргументы функций это единственный реальный способ обмена данными между уровнем PHP и уровнем C. Разумеется, имеется также возможность обмена данными с использованием предопределённых глобальных значений (также обсуждаются позднее), но это по всем показаниям должно быть исключено как совершенно недопустимая практика. Детали см. в Главе 1, "Концепции разработки".

PHP не использует формальное определение функции, поскольку синтаксис вызова всегда динамический и никогда не проверяется на наличие ошибок. Проверку корректности синтаксиса выполняет пользовательский код. Например, можно вызвать функцию с использованием только одного аргумента в первый раз и 4 аргументов - в следующий раз, оба вызова синтаксически являются абсолютно корректными.

Определение количества аргументов

Поскольку в PHP отсутствует формальное определение функции с поддержкой проверки синтаксиса вызова и поскольку возможно переменное количество аргументов, иногда необходимо определять, с каким количеством аргументов функция была вызвана. Вы можете использовать для этого макрос ZEND_NUM_ARGS. В предыдущих версиях PHP этот макрос запрашивал количество аргументов, с которым функция была вызвана, базируясь на вхождении функции в таблице хэшей, ht, которая передавалась в список INTERNAL_FUNCTION_PARAMETERS. Поскольку сама ht теперь содержит количество аргументов, переданных функции, ZEND_NUM_ARGS укорочен до шаблонного макроса (см. его определение в zend_API.h). Но его использование всё ещё является нормальной практикой, чтобы сохранить совместимость с будущими изменениями в интерфейсе вызова.

Примечание: старый эквивалент PHP этого макроса - ARG_COUNT.

Следующий код проверяет корректность количества аргументов:

if(ZEND_NUM_ARGS() != 2)
    WRONG_PARAM_COUNT;

Если эта функция не вызывается с двумя аргументами, выполняется выход с сообщением об ошибке. В это коде применена макро-утилита WRONG_PARAM_COUNT, которая может использоваться для генерации стандартного сообщения об ошибке (см. Рисунок 9.4).

Рисунок 33-1. Рисунок 9.4. WRONG_PARAM_COUNT в действии.

Этот макрос печатает сообщение по умолчанию об ошибке, а затем возвращает управление вызывателю. Его определение также можно найти в файле zend_API.h, и выглядит оно так:

ZEND_API void wrong_param_count(void);

#define WRONG_PARAM_COUNT { wrong_param_count(); return; }

Как вы видите, он вызывает внутреннюю функцию wrong_param_count(), которая отвечает за вывод предупреждения. О генерации специализированных сообщений см. далее раздел "Печать информации".


Назад Оглавление Вперёд
Резюме ВверхЗапрос аргументов