Офис НП AMWAY в Ярославле
→ На карте Офис AMWAY в ЯрославлеПрием и выдача заказов, презентация продукции Амвей, мастер–классы, вопросы по бизнесу Amway:
●Адрес: улица Валентины Терешковой, дом 1 (Вход со двора)
●Телефон: +7 (920) 112-00-91
●Email: matyxho@mail.ru
●Сайт: https://www.amway.ru/user/lebedem
●Визитка: http://yar.meweb.ru
Иерархия статей
Статьи » Собственное мнение » isset и empty - функции? Нет!
Сниппет
Возник на одном из форумов спор об этом. Попробую привести доводы сторон и обосновать свою точку зрения.
isset и empty - функции? Нет!
На одном форуме поднялся как–то срач вопрос, точнее изначально это было утверждение одного из пользователей: "isset и empty в PHP — это... функции!". Шта?!. Но в мануале же ясно сказано, что это языковые конструкции. ЯЗЫКОВЫЕ КОНСТРУКЦИИ, КАРЛ!. Пруф → empty() унд isset(). Читаем:
Хорошо, это похоже на функции... Однако:
Еще один аргумент (забегая вперед скажу, что он не возымел действия на гражданина, как, впрочем, и все остальные) — мы можем банально проверить все объявленные функции, воспользовавшись информационной функцией PHP get_defined_functions(). Выглядеть это может примерно таГ:
И шо? Зуб даю: глаза поломаете, но не найдете в массиве ни isset, ни empty... Из всего вышеизложенного, на мой взгляд, следует только одна истина:
Ни isset(), ни empty() не являются функциями. Это — языковые конструкции языка программирования PHP. Аминь. ©
В качестве консенсуса одним из пользователей (неплохо шарящим в пыхе, надо отметить) была предложена следующая формулировка:
Ну что ж, вот мы и подошли к вилке–twix: попробуй обе палочки и реши, на чьей стороне ты. Доводы "за" и "против" я привел. Удачи!
Цитата [ Отметить все ]
Однако для спорившего гражданина мануал от разрабов PHP не являлся доказательством. В качестве аргумента (единственного, Карл!) данный гражданин привел мне код этих "функций" из исходников:Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций.
Код: C
void zend_compile_isset_or_empty(znode *result, zend_ast *ast) /* {{{ */
{
zend_ast *var_ast = ast->child[0];
znode var_node;
zend_op *opline = NULL;
ZEND_ASSERT(ast->kind == ZEND_AST_ISSET || ast->kind == ZEND_AST_EMPTY);
if (!zend_is_variable(var_ast) || zend_is_call(var_ast)) {
if (ast->kind == ZEND_AST_EMPTY) {
/* empty(expr) can be transformed to !expr */
zend_ast *not_ast = zend_ast_create_ex(ZEND_AST_UNARY_OP, ZEND_BOOL_NOT, var_ast);
zend_compile_expr(result, not_ast);
return;
} else {
zend_error_noreturn(E_COMPILE_ERROR,
"Cannot use isset() on the result of an expression "
"(you can use \"null !== expression\" instead)");
}
}
switch (var_ast->kind) {
case ZEND_AST_VAR:
if (zend_try_compile_cv(&var_node, var_ast) == SUCCESS) {
opline = zend_emit_op(result, ZEND_ISSET_ISEMPTY_VAR, &var_node, NULL);
opline->extended_value = ZEND_FETCH_LOCAL | ZEND_QUICK_SET;
} else {
opline = zend_compile_simple_var_no_cv(result, var_ast, BP_VAR_IS, 0);
opline->opcode = ZEND_ISSET_ISEMPTY_VAR;
}
break;
case ZEND_AST_DIM:
opline = zend_compile_dim_common(result, var_ast, BP_VAR_IS);
opline->opcode = ZEND_ISSET_ISEMPTY_DIM_OBJ;
break;
case ZEND_AST_PROP:
opline = zend_compile_prop_common(result, var_ast, BP_VAR_IS);
opline->opcode = ZEND_ISSET_ISEMPTY_PROP_OBJ;
break;
case ZEND_AST_STATIC_PROP:
opline = zend_compile_static_prop_common(result, var_ast, BP_VAR_IS, 0);
opline->opcode = ZEND_ISSET_ISEMPTY_VAR;
break;
EMPTY_SWITCH_DEFAULT_CASE()
}
result->op_type = opline->result_type = IS_TMP_VAR;
opline->extended_value |= ast->kind == ZEND_AST_ISSET ? ZEND_ISSET : ZEND_ISEMPTY;
}
/* }}} */
Хорошо, это похоже на функции... Однако:
Цитата [ Отметить все ]
Пруф → тынц!. Ищем... Сцуко, и empty, и isset на месте! Нужное нам на данном этапе: "... выглядят как функции... но они ими не являются в действительности". Не являются, Карл! Ну вот как этому гражданину доказать?! Слушать он ничего не хочет: функции, и все тут, хоть ты апстену йопнись! Далее мне был приведен еще "факт", вот он: http://php.net/manual/ru/function.empty.php && http://php.net/manual/ru/function.isset.php. Нужное я пометил. То есть, по логике этого гражданина, ключевое слово в ссылке мана является весомым доказательством его версии. Что ж, коли так... Привожу ему контрдовод: http://php.net/manual/ru/function.echo.php. Шта?! echo тоже функция?! Неубедительно, согласитесь.Список ключевых слов
У этих слов есть специальное значение в PHP. Некоторые из них представляют собой вещи, которые выглядят как функции, некоторые похожи на константы и так далее, но они ими не являются в действительности. Они - конструкции языка. Вы не можете использовать следующие слова как константы, имена классов, функции или имена методов. Использование их как имен переменных в общем допускается, однако может привести к путанице.
Еще один аргумент (забегая вперед скажу, что он не возымел действия на гражданина, как, впрочем, и все остальные) — мы можем банально проверить все объявленные функции, воспользовавшись информационной функцией PHP get_defined_functions(). Выглядеть это может примерно таГ:
Код: PHP
$array = get_defined_functions();
echo var_dump($array);
И шо? Зуб даю: глаза поломаете, но не найдете в массиве ни isset, ни empty... Из всего вышеизложенного, на мой взгляд, следует только одна истина:
Ни isset(), ни empty() не являются функциями. Это — языковые конструкции языка программирования PHP. Аминь. ©
В качестве консенсуса одним из пользователей (неплохо шарящим в пыхе, надо отметить) была предложена следующая формулировка:
Цитата [ Отметить все ]
. Пожалуй, это ближе к истине, однако лишь отчасти, имхо. Никто не ставит под сомнение факт того, что эти языковые конструкции ведут себя как функции, речь шла и идет лишь о формулировке, о терминологии.Языковые конструкции пхп это просто зарезервированные функции
Ну что ж, вот мы и подошли к вилке–twix: попробуй обе палочки и реши, на чьей стороне ты. Доводы "за" и "против" я привел. Удачи!
Понравилась статья?
Метки для данной статьи
Похожие статьи
Заголовок
Категория
Просмотров
Поделиться:
Последние активные темы форума
Темы | Просмотров | Ответов | Последние сообщения | |
Вопрос по переделке bb-кода PHP, MySQL |
22587 | 5 | Pisatel 26. мая 2017 |
|
Вопросы по Ajax форме обратной связи CMS PHP Fusion |
70052 | 48 | Ditrin 19. февраля 2017 |
|
BBCode YouTube Video Colorbox mod CMS PHP Fusion |
15537 | 2 | Pisatel 10. декабря 2016 |
|
Как лучше создать собственную страницу? CMS PHP Fusion |
18131 | 17 | Pisatel 11. мая 2016 |
|
Небольшие вопросы по скриптам магазина и катало... PHP, MySQL |
147698 | 80 | Pisatel 11. января 2016 |
|
BBCode Code mod CMS PHP Fusion |
14641 | 0 | Pisatel 31. августа 2015 |
|
Ajax Like Dislike Article Panel CMS PHP Fusion |
22844 | 16 | Pisatel 07. июля 2015 |
|
Хлебные крошки / BreadCrumbs SEO Panel CMS PHP Fusion |
26588 | 17 | Pisatel 04. июля 2015 |
|
Abbr Description BBCode CMS PHP Fusion |
7746 | 0 | Pisatel 15. июня 2015 |
|
Плагин Email рассылки Mail To All by Pisatel CMS PHP Fusion |
37598 | 32 | Pisatel 26. апреля 2015 |
|
Подозрительный трафик и прочие страшилки Всякая хрень |
11920 | 2 | Ditrin 23. апреля 2015 |
|
Мод Newsletter - рассылка писем пользователям с... CMS PHP Fusion |
31228 | 13 | Pisatel 10. апреля 2015 |
|
Мод отправки писем PHPMailer для PHP-Fusion CMS PHP Fusion |
131183 | 113 | Ditrin 06. апреля 2015 |
|
Появление неизвестного файла subscriptions.php CMS PHP Fusion |
8927 | 2 | Pisatel 06. апреля 2015 |
|
Autoban on IP CMS PHP Fusion |
23364 | 13 | Pisatel 03. апреля 2015 |