isset или а не уго в топку?
Давным давно читал что рабочий код должен быть без нотисов (предупреждения).
Сегодня, после двух часовой дискуссии (я не участвовал), мне сказали что писать isset это глупость, а именно в таком случае:
Код:
$qwe=$_GET['qwe'];
Аргументированно это тем что это быстрее работает чем:
Код:
$qwe=isset($_GET['qwe'])?$_GET['qwe']:null;
Собственно вопрос: Насколько это быстрее и правильнее? Если переменная есть, то да быстрее, а если нет, вернет null (аналогично примеру ниже), но будет нотис и этот нотис захочет записаться в файл - и получается что будет работать медленнее. Или я что-то не понимаю?
RussianSpy =(
Ох, не хватает язвительного ответа
Вообще используйте данные сразу из массива. Зачем их дублировать?
И, кстати,
$arr['ololo'] = null;
isset($arr['ololo']); // === false
Код:
$qwe=empty($_GET['qwe'])?'пусто':$_GET['qwe'];
И гавно код тут не причем, вопрос про isset.
Про null я знаю)
isset - это не функция, а конструкция языка, просто для удобства вызывается всё равно со скобками.. если ваши коллеги утверждают, что второй вариант выполняется медленнее, пусть приведут доказывающие это тесты.. empty тоже конструкция языка (http://ru.php.net/manual/en/function.empty.php), но empty() не полный эквивалент isset().
тов. UAS, а что вас смущает в таком поведении? в мануале чётко написано, значение ключа установлено в NULL - значит ключ считается незаданным, юзайте array_key_exists(), что вполне логично на мой взгляд
з.ы. http://www.phpbench.com/ четвёртый тест, и ещё приписочка внизу полезной может оказаться
з.з.ы. а вообще можете забить на isset() и писать как говорят товарищи, но только в одном единственном случае: если вы точно знаете, что данная переменная будет.. ну например это у вас какой-нибудь внутренний вызов api-функции внутреннего движка, почему-то по http и вы гарантированно имеете что-то в запросе.
С GET и POST гарантий наличия не может быть.
Цитата:
Internal Server Error
CageFS jail error Failed to initialize lve library instance: No such file or directory
suPHP 0.7.1
CageFS jail error Failed to initialize lve library instance: No such file or directory
suPHP 0.7.1
Цитата: clgs
http://phpbench.com/ -
Цитата:
Internal Server Error
CageFS jail error Failed to initialize lve library instance: No such file or directory
suPHP 0.7.1
CageFS jail error Failed to initialize lve library instance: No such file or directory
suPHP 0.7.1
видать упал сервак у них)) в-общем, там был бенч isset vs empty vs in_array(), а приписку снизу по памяти не воспроизведу.. откройте его через пару дней, авось восстановят
гарантии быть могут, если это оба ваших приложения и внутренее исключает приём данных от пользователя непосредственно, только от своего внешнего) только если _GET/_POST вообще не передадутся в виду бага сервера, но это уже другой вопрос.. ну или кривой программист, неожиданно поменявший внутренний протокол доступа)
Цитата: MrXaK
гарантии быть могут, если это оба ваших приложения и внутренее исключает приём данных от пользователя непосредственно, только от своего внешнего)
так тут идет вопрос именно при приёмки данных от пользователя.
Код:
if ( empty($_GET['var']) ) { ...
или проверка массива на пустоту очень даже влияют на читабельность кода и процесс разработки.
Но в итоге каждый волен поступать как хочет и придерживаться удобного для него code style. А коллеги... недалекие люди потратившие два часа времени на полную х***ю. Вдвойне х***ю если за счет рабочего времени.