[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: isset(), array_key_exists(), __isset()
Страницы: 1, 2, 3
linker
Цитата
Никто при мало-мальски правильной архитектуре не должен проверять наличие переменных.


Гениально. Это справедлива для типизированных языков, где каждую переменную необходимо ОБЯЗАТЕЛЬНО объявлять, т.е. выделять под них память. NULL - это отсутствие какого-либо значения вообще. Т.е. переменная фактически не ссылается ни на какую область памяти, т.е. фактически $var=null; должно в голове интерпретироваться как unset($var);

_____________
Gear Framework
Gear Framework на Github
vasa_c
Не вижу ни малейшей связи разбираемой проблемы ни с типизированными языками, ни с языками со статическим выделением памяти, которые, видимо, имелись ввиду.

Если отбросить лишнее философствование, я не помню ни одной ситуации за последнии годы, чтобы у меня в середине кода вдруг оказалось, что я не знаю, какие у меня переменные на данный момент есть.

Элементы же массива со значением NULL не вызывают ошибки при обращении, перебираются при итерировании, отображаются в размере массива, заменяют соответствующие элементы при array_replace(). То есть ведут себя как нормальные элементы с каким бы то ни было значением.


_____________
Блог ГО | Таблица символов Юникода | Графомания
vasa_c
Прямо из текущего пример.

Есть конфиг некой системы в виде массива. Ключ сервиса => его параметры.

Я свой кастомный конфиг могу передать. И он мержится поверх дефолтного.

Нет ключа - остаются настройки по умолчанию.
Есть и он NULL - значит сервис отключается.

Приведите пример, где NULL в массиве был бы ближе к отсутствию, чем к наличию элемента.

_____________
Блог ГО | Таблица символов Юникода | Графомания
linker
vasa_c
Господа, читайте мануал, isset() работает по значению переменной и возвращает true, если переменная не является NULL. Проверка на присутствие переменной является её побочным эффектом, ибо что переменная не объявлена, что объявлена, но у неё отсутствует значение - равнозначно. Ключевое слово для isset() - значение, а не сама переменная или элемент массива.

_____________
Gear Framework
Gear Framework на Github
vasa_c
Каким макаром тут вообще чтение мануала?

_____________
Блог ГО | Таблица символов Юникода | Графомания
linker
vasa_c
Макар в том, что по-моему забыли что делает isset()

_____________
Gear Framework
Gear Framework на Github
vasa_c
isset для объекта с магическими свойствами делает то, что мы реализуем в __isset, вне зависимости от того, что в мануале написано. Но желательно, конечно, при этом сохранять какую-то семантику его поведения.

И разбираемый здесь вопрос - можем ли мы использовать так как нам надо, как подразумевают современные реалии и положить при этом на его древние атавизмы?

Или мы должны с упорством поддерживать эти атавизмы и дополнительно лепить какие-то методы типа is_key_exists, ломая при этом ясность, полиморфизм и хорошее настроение?

Я считаю, что не должны.

_____________
Блог ГО | Таблица символов Юникода | Графомания
linker
vasa_c
Читай выше, что я написал в своём первом посте.

_____________
Gear Framework
Gear Framework на Github
vasa_c
Чукча не читатель, чукча писатель

_____________
Блог ГО | Таблица символов Юникода | Графомания
linker
vasa_c
Чукча едет в поезде и поёт о том, что видит.

_____________
Gear Framework
Gear Framework на Github
killer8080
isset по логике проверяет установлено ли значение, если бы она проверяла объявлена ли, то и называлась бы isdefined ИМХО
linker
Логичным поведением isset() на необъявленной переменной должно было бы выдача минимум нотиса, но оно отдаёт false и программисты этим пользуются, ну как бы и да фиг с ним.

_____________
Gear Framework
Gear Framework на Github
SlavaFr
Цитата (killer8080 @ 6.02.2014 - 07:41)
isset по логике проверяет установлено ли значение, если бы она проверяла объявлена ли, то и называлась бы isdefined ИМХО

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

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.