Определить существует ли переменная

grigori

( ͡° ͜ʖ ͡°)
Команда форума
grigori, хватит троллить, я не вижу смысла в array_key_exists(), попробуй привести пример где он реально нужен. :)
давно я с массивами не работал, я уже много лет коллекции объектов использую
но было, надо вспомнить

я таки допускаю использование ключей как данных, т.е. я пишу в ключи вместо создания 2-мерного кортежа,

и не троллю, а ставлю под сомнение спорные на мой взгляд и безапелляционные утверждения
 

craz

Нестандартное звание
да про то и говорим что к массиву да, к просто переменой НЕТ
 

tz-lom

Продвинутый новичок
да про то и говорим что к массиву да, к просто переменой НЕТ
если бы ты ещё посмотрел на код ТС то может быть ты бы этого не писал
Pascal9x
норм код,я бы правда global $res; выбросил и передавал бы как параметр

весь срач выше из за того что ТС не уточнил что ему нужна не переменная,а значение из массива

— вот! Было бы хорошо ...
отладка опечатки стала бы наслаждением
 

Вурдалак

Продвинутый новичок
отладка опечатки стала бы наслаждением
— а когда ты пишешь
PHP:
public function get($key)
{
    return isset($arr[$key]) ? $arr[$key] : NULL;
}

$this->get('smbvth');
ты не можешь опечататься? Или ты сразу exception кидаешь? Ты сам-то веришь в то, что говоришь, или так, для красного словца?
 

tz-lom

Продвинутый новичок
могу,но опять таки , если я опечатаюсь в isset то да,беда,и ничего не поделаешь, а если дальше,то Notice выскочит
а теперь прикинь ту самую кучу мест где можно опечататься и NULL будет подходящим значением,и поймёшь весь масштаб драмы от такого нововведения
при этом самое неприятное что ты и тестами можешь такое не покрыть, если опечатка будет не внутри модулей (и будет менять поведение как в твоём примере) а допустим в инициализациях объектов
при этом чем строже написан код тем реже он будет вылетать из за таких опечаток
 

Духовность™

Продвинутый новичок
я в своей массивообразной обертке уже давно возвращаю NULL
любой нотайс, ровно как и undefined - тупость и глупость, мешающая при разработке
 

Духовность™

Продвинутый новичок
+1. Надо эксепшн вываливать в случае отсутствия переменной/ключа - это же потенциальная серьезная ошибка логики.
эксепшн нужно вываливать, если у вас какой-то конкретный объект, модель, например

а в моем случае мне экзепшены нахрен не нужны. я обращаюсь к объектному массиву и получаю либо NULL, либо значение. Все. Другого мне не надо. Во view такую методику очень удобно применять, когда в шаблоне пишу <input value="<?=$this->var?>"> и ещё много других случаев.
 

Absinthe

жожо
а что мешает геттер один раз в Duhovnost\View прописать необходимый?
Это потенциальное поле ошибок и во всяких питонах программа сразу падает при этом.
 

Pascal9x

Новичок
Спасибо всем, ответ на свой вопрос я нашёл.

Вурдалак написал(а):
grigori, хватит троллить, я не вижу смысла в array_key_exists(), попробуй привести пример где он реально нужен.
Приведённый мною код и есть этот самый пример. В моей функции я допускаю значение null у $v['params'], но не допускаю у остальных ключей массива $v.

Я пишу качественную софтину с открытым исходником и перспективой её расширения другими программистами. Поэтому я защищаю свои функции от неправильного использования другими программистами.
grigori написал(а):
для меня различие в том, что при обращении к отсутствующему ключу будет Notice,
и чтобы его не было я проверяю наличие полей перед обращением
Для меня это существенно. Никаких Notice в моей программе при более-менее "пригодных для жизни" условиях быть не должно.
 

Absinthe

жожо
Я пишу качественную софтину с открытым исходником и перспективой её расширения другими программистами.
Это в таком же качестве, как тот кусок кода?

И в любом случае я не понимаю, где найдена проблема с isset(например).
 

Pascal9x

Новичок
Absinthe написал(а):
Это в таком же качестве, как тот кусок кода?
Немного лучше.
Absinthe написал(а):
И в любом случае я не понимаю, где найдена проблема с isset(например).
Это печально.
По поводу софтины - у меня нет желания рассказывать о ней публично до первой рабочей версии. Кому интересно - можем пообщаться в привате.
 

Вурдалак

Продвинутый новичок
Приведённый мною код и есть этот самый пример. В моей функции я допускаю значение null у $v['params'], но не допускаю у остальных ключей массива $v.
— а нихрена. Ты опять-таки делаешь различие между NULL и отсутствующим значением. Твой пример переписывается просто с твоего

PHP:
if (!isset($v['uid'], $v['cmd'], $v['send']) or !array_key_exists('params', $v)) {$result[$k]=false; continue;}

// ...

$params = (!is_null($v['params']) and (is_array($v['params']) or !$send)) ? gzserialize($v['params']) : '';
на
PHP:
if( ! isset($v['uid'], $v['cmd'], $v['send']) ) {
    $result[$k] = false;
    continue;
}

// ...

$params = (isset($v['params']) and (is_array($v['params']) or !$send)) ? gzserialize($v['params']) : '';
Требовать присутствие ключа params не имеет тут никакого смысла.

Никаких Notice в моей программе при более-менее "пригодных для жизни" условиях быть не должно.
— а их и не будет.

grigori, я всё ещё надеюсь увидеть код с PDO и Notice, о котором ты говорил.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Вурдалак
эх, я бы хотел поднять старый код, но боюсь, не смогу
извини за балаболство
 

Pascal9x

Новичок
Вурдалак написал(а):
Твой пример переписывается просто с твоего
Спасибо, это действительно красиво, так и сделаю. Повторюсь, что обходных путей для решения проблем можно придумать большое множество, однако мы уходим от темы и было бы прекрасно, если бы isset() определяла существование переменной в любом случае.

Вурдалак написал(а):
— а их и не будет.
Ни что не идеально в этом мире. Посему я и сказал "Немного лучше", ибо если в $v['cmd'] каким то чудом попадёт объект - это будет catchable fatal.
 

cDLEON

Онанист РНРСlub
Духовность™
То, что ты говнокодер - это и так все прекрасно знают :)
 
Сверху