Офис НП 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | 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
1 2 | $array = get_defined_functions(); echo var_dump ( $array ); |
И шо? Зуб даю: глаза поломаете, но не найдете в массиве ни isset, ни empty... Из всего вышеизложенного, на мой взгляд, следует только одна истина:
Ни isset(), ни empty() не являются функциями. Это — языковые конструкции языка программирования PHP. Аминь. ©
В качестве консенсуса одним из пользователей (неплохо шарящим в пыхе, надо отметить) была предложена следующая формулировка:
Цитата [ Отметить все ]
. Пожалуй, это ближе к истине, однако лишь отчасти, имхо. Никто не ставит под сомнение факт того, что эти языковые конструкции ведут себя как функции, речь шла и идет лишь о формулировке, о терминологии.Языковые конструкции пхп это просто зарезервированные функции
Ну что ж, вот мы и подошли к вилке–twix: попробуй обе палочки и реши, на чьей стороне ты. Доводы "за" и "против" я привел. Удачи!
Понравилась статья?
Метки для данной статьи
Похожие статьи
Заголовок
Категория
Просмотров
Поделиться:
Последние активные темы форума
Темы | Просмотров | Ответов | Последние сообщения |