LINUX.ORG.RU

Основная проблема PHP

 


0

1

теме наверное всё же место в talks, но хочется анонов

в общем ковыряя древний большой php5.2-проект с классическим, легендарным говнокодом, ради которого я даже временно перешёл с emacs на phpstorm, потому что /me тупо не в силах справится с размером контекста, подумал о том, что php-мир был бы совсем другим, если бы не одна маленькая функция

наличие этой функции это главная проблема php, именно из-за неё всё беды, как мне сейчас кажется

без неё логика строилась бы по другому и соответственно огромное количество кода было бы другим (в хорошем смысле), и судьба php была бы совсем другой

это функция isset

grep isset -R | wc -l
13274
★★★★★

Последнее исправление: Debasher (всего исправлений: 4)

Основная проблема в разработчиках и сложившейся инфраструктуре. Ситуация вокруг ноды как две капли аналогична. Тысяча мартышек ничего не могут.

anonymous
()
Ответ на: комментарий от anonymous

Основная проблема в разработчиках и сложившейся инфраструктуре

да, но причина этого в ОП-посте

// допускаю возможность что у меня сейчас просто временное психическое расстройство (причина опять же в ОП) хотя вероятнее что оно у меня всегда

Debasher ★★★★★
() автор топика

а еще есть функция empty
поддерживаю предыдущего оратора: проблема в руках, а не в языке

kiotoze ★★★★
()

Я конечно не профессиональный php программист, но судя по описанию, функция полезная. Чем бы ты предложил ее заменить?

Ghostwolf ★★★★★
()
Ответ на: комментарий от Ghostwolf

Чем бы ты предложил ее заменить?

выкинуть нахер просто
в хорошем коде и так должно быть всегда ясно, есть ли переменная

Debasher ★★★★★
() автор топика
Ответ на: комментарий от Ghostwolf
isset() does not return TRUE for array keys that correspond to a NULL value, while array_key_exists() does.

, например

Или у нее более широкое применение?

о да
какое ей только применение не находят

Debasher ★★★★★
() автор топика
Последнее исправление: Debasher (всего исправлений: 3)

Как я понимаю, её используют в основном как проверку существования ключа в массиве. Если ключ отсутствует, получишь Notice, отображение которого на продакшене должно быть отключено, и null (?) в значении.

То есть вполне можно от isset() отказаться, где это ожидаемое поведение программы. А где нет - можно использовать функцию типа:

function get_or_default($array, $key, $default) {
    return isset($array[$key]) ? $array[$key] : $default;
}

alix ★★★★
()
Ответ на: комментарий от alix

её используют в основном как проверку существования ключа в массиве.

к сожалению далеко не только там

Debasher ★★★★★
() автор топика
Ответ на: комментарий от Debasher

А где ещё? Не могу придумать другой ситуации, когда я не уверен, существует переменная или нет.

alix ★★★★
()
Ответ на: комментарий от anonymous

Основная проблема в разработчиках и сложившейся инфраструктуре.

Уже не проблема. Потому что появление composer взломало всю инфраструктуру.

KRoN73 ★★★★★
()
Ответ на: комментарий от alix

в общем случае например так
где-то в одном месте если условие выполняется что-то инклудится и в контексте что-то появляется (глобальная переменнная например)
в другом месте если эта переменная существует что-то выполняется

Debasher ★★★★★
() автор топика
Последнее исправление: Debasher (всего исправлений: 1)
Ответ на: комментарий от Debasher

в хорошем коде и так должно быть всегда ясно, есть ли переменная

Как быть при передаче переменного числа аргументов или аргументов в хеше?

KRoN73 ★★★★★
()

Основная проблема PHP

это функция isset

Нет. А те, кто используют её не по назначению — ССЗБ.

Основная проблема кроется в плохом дизайне. И это не одна функция. Впроче это уже было сто раз разжёвано до меня. Есть движения в сторону улучшения, но некоторые недостатки окончательно искоренить всё равно не удастся. ИМХО.

Kilte ★★★★★
()
Ответ на: комментарий от Debasher

Тогда сочувствую, что приходится работать с таким кодом.

alix ★★★★
()

Чушь, основная проблема совсем иная. И их несколько.

umren ★★★★★
()

isset это не причина, а следствие.

anonymous
()

есть продолжение(реверс аверса) основного преимущества PHP:

нулевой порог вхождения.

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

корреляция между последним навыком и быть_не_php_программистом больше 1.

а вообще ща и надолго дефицит программистов(в смысле что этот термин подразумевает в 1975+-10 лет)

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

в уме неспособны сколько не было времени перемножить 2ух значные десятичные числа.

ум, он что для этого что-ли? для этого есть калькуляторы, кассирши, на худой конец. Или ты хочешь дополнить тезис ленина о кухарках?

aboutcard
()
Ответ на: комментарий от Debasher

в хорошем коде и так должно быть всегда ясно, есть ли переменная

Просто феерический бред. Когда всегда ясно, есть ли переменная, это не говнокод даже, это код, написанный недоразвитым. С таким же успехом можно проверку по ключу в массиве отменить, исходя из того, что в *хорошем коде* массивы всегда иммутабельны, и нет никакого добавления или удаления элементов.

aboutcard
()
Ответ на: комментарий от aboutcard

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

Я вот за if-then-else что-то начал сомневаться. Добавь все таки тег тупняк, он тут более чем уместен.

aboutcard
()

isset безобиден, причины в неосиляторстве и низком пороге вхождения.

Впрочем строгость например в питоне не спасает от лапши и низкопробного кода.

.

anonymous
()
Ответ на: комментарий от aboutcard

видимо я не очень понятно выразился, говоря слово "переменная"
речь не идёт о ключах в массиве
речь идёт например о самом массиве

Debasher ★★★★★
() автор топика
Последнее исправление: Debasher (всего исправлений: 1)
Ответ на: комментарий от aboutcard

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

Debasher ★★★★★
() автор топика
Ответ на: комментарий от aboutcard

прописываю тебе статически-типизированный язык

Debasher ★★★★★
() автор топика
Ответ на: комментарий от Debasher

переменные в которых они находятся должны быть независимы от них

Что значит независимы? Зачем они тогда вообще нужны? Переменная должна указывать на коня в вакууме?

aboutcard
()
Ответ на: комментарий от aboutcard

Переменная должна указывать на коня в вакууме?

ну в общем да

Debasher ★★★★★
() автор топика
Ответ на: комментарий от Debasher

Дык я уже объяснил вроде. Твои переменные — это, семантически, такие же ключи глобального хеша, назовем так. Так почему же они не должны быть доступны для проверки? В чем отличие от любого другого, скажем, хеша?

aboutcard
()
Ответ на: комментарий от aboutcard

можно и зайца на барабане научить играть.

Но единственно возможное движение в сфере логики есть процесс дедукции, процесс выведения из исходной посылки. ... Как только к идее применяют логику как некое самодвижение мысли, а не как необходимое средство контроля мышления, эта идея превращается в посылку.

и да. the marching morons

qulinxao ★★☆
()
Ответ на: комментарий от aboutcard

Твои переменные — это, семантически, такие же ключи глобального хеша, назовем так.

не, я не хочу так называть, т.к. это не так
точнее, может в пхп это как раз так
но это содомия

Debasher ★★★★★
() автор топика
Ответ на: комментарий от aboutcard

понятно, вот мы и расставили все точки, больше вопросов нет)
спасибо за беседу

Debasher ★★★★★
() автор топика

странно, что до сих пор не вспомнили захара мая

anonymous
()

по-моему тут проблемы вообще в условном объявлении переменных как таковом, а не в isset. Их даже несколько:

  • переменные используются как черные ящики (из-за слабого type hinting'а), в которых непонятно, что лежит (тут только phpDoc пока может помочь)
  • лайфтайм переменных мало того, что размазан по всей лапше императивного кода, так ещё и неопределен до момента исполнения. Тут введение области видимости на уровне блоков кода ближе к решению корня проблемы, но это всё к чертям поломает в PHP (как и удаление функции isset).
  • стандартная для большинства говнокодеров практика вставки костылей if'ами, если что-то не работает и вообще низкая культура программирования.

Поможет только повышение культуры программирования среди разработчиков, приучение к рефакторингу. Странно, что в PSR про условное объявление ничего не прописано.

nguseff
()
Ответ на: комментарий от Debasher

array_key_exists?

Если отсутствие ключа равно нулевому/пустому значению, придётся двойную проверку задействовать. Так что лично мне приходится оба варианта использовать часто, как array_key_exists, так и empty. Вот isset, по-моему, ни разу не использовал за последние лет 15 :)

KRoN73 ★★★★★
()
Ответ на: комментарий от qulinxao

Процесс дедукци вообще невозможен, *чисто логически*, либо ограничен конечным множеством. Например, ты говоришь, «все люди смертны. Значит греки тоже смертны». Для того чтобы твое утверждение сработало, тебе надо по-хорошему, вывести эту посылку индуктивно, поскольку посылка — это всего лишь допущение. «Все люди, которых я знаю — смертны, значит, скорей всего, все люди смертны». То есть, твоя посылка в дедуктивном выводе — это все равно следствие индуктивного вывода, если речь не идет об ограниченном множестве.

aboutcard
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.