• Как избежать PHP Notice: Undefined offset?

    @Vitsliputsli
    Роман Юрьевич Ипатьев, у автора так написано в примере.

    Вариант с isset лучше, всего 1 функция, без ненужных жонглирований с присвоением null переменной.
  • Что должен уметь системный администратор?

    @Vitsliputsli
    fsgdoterr, нет, там ничего необычного. Из специфики - нужно будет устанавливать софтфон и настроить в нем параметры которые вам дадут. Что-то сложное, не на клиентских машинах. Раз все на винде, вряд ли много мест. Настраивать машины каждый день не нужно, чаще придётся гарнитуры пользователям менять.
  • Как в MySQL запросе добавить колонку в таблицу с проверкой наличия этой колонки?

    @Vitsliputsli
    Сергей Кореневский, уже предложил выше. Изменения структуры бд не должны проходить наугад. Любой вменяемый механизм миграций гарантирует наличие столбца, если миграция применена и его отсутствие, если не применена. Т.е. при нормальной работе, когда сохраняется контроль над базой, подобные костыли не нужны.
  • Как обработать все аргументы функции?

    @Vitsliputsli
    Shimpanze,
    function foo( string $str, array $arr = [], int $int = 123 ) {
    foreach( func_get_args() as $argument ) {
    if ( is_string( $argument ) ) {
    $argument = trim( $argument );
    }
    }
    var_dump( $str );
    }

    Если вы сами указали что только 1 аргумент string, на кой проверять их все?
    Если вашему классу на входе нужен аргумент без пробелов, то это не его зона ответственности делать trim, пусть это делает тот, кто валидирует неизвестные данные. Если есть опасность что в класс на вход придут некорректные данные, передавайте в него объект, который гарантирует, что внутри него все уже провалидировано и обработано.
  • Как в MySQL запросе добавить колонку в таблицу с проверкой наличия этой колонки?

    @Vitsliputsli
    Если вам нужно подобное, значит вы утратили контроль над структурой БД. Здесь нужно внедрить нормальный механизм миграций, вместо написания монструозных костылей.
  • Как выполнять задачу каждые 10 секунд в PHP?

    @Vitsliputsli
    Александр Андропов, и не забудьте, что при решение через cron понадобится впиливать контроль параллельного запуска, когда новый стартует, а старый еще не отработал.
  • Как выполнять задачу каждые 10 секунд в PHP?

    @Vitsliputsli
    inFureal, неизвестно подойдет это автору или нет. Но и не обязательно писать 10 в sleep, можно вычислять исходя из времени работы. Для таких частых запусков это лучшее решение, т.к. не надо запускать постоянно скрипт, он в памяти, и не надо контролировать параллельный запуск, когда скрипт предыдущего запуска еще не завершился.
  • Цикл с SQL запросом?

    @Vitsliputsli
    А еще можно посмотреть логи. И скорее всего, там обнаружится сообщение об ошибке в БД из-за нарушения уникальности в каком-либо поле.
  • Какая нужна теоретическая база на собеседовании джуна?

    @Vitsliputsli
    Роман Юрьевич Ипатьев, как по мне, пусть лучше джун из магических методов знает только конструктор/деструктор, про автолоад, что composer все сам делает, если соблюсти PSR (хотя может и имелось ввиду), а implements и use вообще не использует. Но знает SOLID, GRASP теоретически, и хотя бы нарушение Single Responsibility может определить по коду. Т.к. большинство магических методов нужны для специфических задач, и чем их меньше, тем лучше. Интерфейсы невозможно нормально применять не зная того же SOLID, а треды вообще не нужны. А про "контрол-клик" отличное замечание.
  • PHP 7.4: как проверить, что типизированное свойство инициализировано?

    @Vitsliputsli
    Ошибки и исключения - это исключительные ситуации, нельзя их использовать как стандартную логику.
  • Как сделать автоподключение базы данных?

    @Vitsliputsli
    alexey_novorisov_89, выглядит излишней, потому что не сильно изменяет функционал оригинального класса PDO. Разумеется не нужно создавать новый объект в каждом классе, тем более в данном случае каждый новый объект - это новый коннект к базе.
    Т.е. вы создаете 1 объект в одном месте, а через конструктор или методы внедряете его в объект, где он необходим.
    Т.е. как вариант:
    public function __construct(iDatabase $db)
        {
            $this->db = $db;
        }
        ...
        $cities = new Cities($this->db)

    Получается, что создав объект DB в одном месте, чтобы дотянуть его до потребителя, его придется тащить через конструкторы промежуточных классов. Что бывает не очень удобно. В какой-то степени проблема решается DI-контейнерами, при условии создании всех объектов сразу и возможности вытащить создание подобных объектов в самое начало.
    То, что вы хотите сделать - это service locator. Не важно как вы организуете вызов, через глобальную переменную/функцию, через статическое свойство/метод. Не важно будете вы обращаться к конкретному классу/объекту или к контейнеру. Важно что вы обращаетесь к некому общему реестру и получаете объекты из него. Подход часто считают антипаттерном, хотя на мой взгляд, у него просто своя ограниченная сфера применимости. Для глобальных для всего приложения объектов он вполне подходит. Безусловно минусов у него хватает: вы привязываетесь к конкретному типу объектов, которые возвращает реестр, т.е. не сможете гибко менять этот объект (равно как и сам реестр). То, чего вы боялись, захочется сделать 2 коннекта к БД - нужно будет придумывать как это разруливать в каждом вызове service locator (хотя в большинстве задач коннектов к БД мало и это не представляет сложности). При тестировании может быть проблематично подменить объект запрашиваемый из service locator, но в вашем примере не проблема, т.к. сперва мы берем зависимость внедренную через конструктор. Также, обращения в service locator должны возвращать один и тот же объект, т.к. нельзя допустить создания новых объектов при каждом обращении.
    Т.е. ваш вопрос совсем не про конфиги, а про зависимости объектов. Можно создать его в новой формулировке, вдруг что интересного напишут, тема не однозначная все-таки.
  • Как сделать автоподключение базы данных?

    @Vitsliputsli
    alexey_novorisov_89, что касается классов, если не брать мелочи, то, обёртка пока выглядит лишней, но для изучения норм, но все равно непонятно, зачем mysql чего-то там, у вас pdo и общение с драйверами уже универсализировано насколько возможно. Т.е. должна быть обёртка для pdo, а не mysql.
    А "ВОТ ТУТ" это интересный вопрос, и он не про конфиги. Зависимости должны внедрятся - DI, вы же хотите их создать внутри (service locator, например), это антипаттерн. Т.е. либо не кошерно, но просто, например через service locator (его тоже не нужно совать в каждый класс, здесь он не нужен, перенесите на другой уровень), либо через какие нибудь хитрые DI контейнеры.
  • Как сделать автоподключение базы данных?

    @Vitsliputsli
    Антон, у него MVC, а в этой парадигме моделью будет все что вы перечислили, и маппер для полей в бд, и сервисный слой. Но что логически эти вещи должны быть разделены мысль правильная.
  • Как сделать автоподключение базы данных?

    @Vitsliputsli
    alexey_novorisov_89, да, типа того. Не очень понятно зачем константы, но без примера не угадаешь.
    Отдельная строка с названием драйвера конкретной БД, или название драйвера в составе строки dsn. Или просто dsn, если используете PDO, он сам подключит нужный драйвер.
  • Как сделать автоподключение базы данных?

    @Vitsliputsli
    Зачем объекты/классы в конфиге (и все таки класс или объект?)? Зачем в конфигурационном файле зависимость от реализации? Массива строк с необходимыми строковыми данными вполне достаточно, а уже на его основе создавайте нужные объекты. Посмотрите любой фреймворк.
    Был бы пример, было бы интереснее.
  • Почему встроенный в php сервер тормозит?

    @Vitsliputsli
    galliard, замерьте время выполнения разных этапов вашего скрипта и найдите на каком этапе наблюдаются проблемы.
  • Почему для скриптинга в шелле используется bash а не более современный язык программирования?

    @Vitsliputsli
    Saboteur,
    баш хранит историю команд в памяти и в файл ее скидывает только при выход

    да, согласен, именно так.

    Про Ctrl+C это не проблема, но кто-то должен продавить опцию запуска того же питона без возможности его прервать по ctrl-C, и внедрить это в глобальный репозиторий.

    Не нужно ничего продавливать. Как правило, языки умеют обрабатывать сигналы ОС. Просто нужно в коде описать обработчик сигнала (в python это pcntl_signal), и в нем задать, что ничего не делать при Ctrl+C. Т.е. там все уже есть.

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

    @Vitsliputsli
    Alex Wells,
    новые патч версии наоборот более стабильны. Возможно выше назвал их "минорными" - если так, то имел в виду именно патч. В них только багфиксы, они априори не могут быть менее стабильными)

    Не должны быть, но не факт. Но речь была о другом, если ежемесячно правятся баги - это явно не стабильная версия. Значит есть предыдущая мажорная или минорная версия, которая работает уже достаточно давно, и если там случается найти баг, то это очень редко, соответственно никто там каждый месяц уже не правит баги. Про это я и писал, что лучше подождать с новинками, но зато работать с более стабильным ПО, тем более когда речь идет о такой капризной штуке как СУБД.

    Остальные цитаты, это не мои.
  • Почему для скриптинга в шелле используется bash а не более современный язык программирования?

    @Vitsliputsli
    Alex Wells, написал про bash подробнее чуть выше. А вот про обновление СУБД раз в месяц, соглашусь с Saboteur, если вы заботитесь о стабильности работы - это не лучший подход. Использовать нестабильные версии, которые правятся каждый месяц - это риск словить проблемы. Любая новая версия СУБД должна проходить проверки DBA и делать это каждый месяц нереально, лучше не использовать новый функционал, чем так рисковать. Разве что стабильность не является для вас важным фактором и вы готовы так рисковать.