Задать вопрос
  • Как упростить примитивную тернарную логику?

    @Vitsliputsli

    вынесение функции в переменные не предлагать

    Почему?
  • Как разбить таблицы?

    @Vitsliputsli
    Вопрос суррогатный vs натуральный ключ сложный, но в большинстве случаев лучше выбрать именно суррогатный. К примеру, если сделать натуральный ключ для регионов по его 2-3 буквенному ISO коду - отлично, а вот делать натуральный ключ по названию отеля очень сомнительный выбор, мало того что название может поменяться, так еще и делать ключ придется очень длинным и надеяться, что все названия в него поместятся, а потом еще и ссылки на него делать такими же. И скорее всего никто не будет искать по полному названию отеля, и тогда плюсы его как кластеризованного индекса сходят на нет.
    Array, json и т.п. - это как правило нарушение нормализации, делать так нужно только тогда, когда понимаешь, что плюсы перевесят минусы. Т.е. в большинстве стандартных ситуаций это тоже не нужно.
  • Как разбить таблицы?

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

    @Vitsliputsli
    Akina, надо еще не забыть: WHERE оператор is null. И разумеется не в рамках транзакции делать.

    Блокировки никуда не денутся в этой схеме, но из-за простоты 1 запроса, все должно работать быстро и особых проблем не возникнет.
    Вообще, даже если у автора сотни операторов на проекте, это не будет представляться проблемы во время работы, т.к. обращаться за заявками они будут в разное время. Но есть пиковый момент, когда операторы в ожидании и заявки поступают в обзвон. В этот момент все операторы ломятся на сервер за заявками, ктото успевает заблокировать 1 запись под update, остальные блокируются и ждут, update завершается, остальные получают ответ "приходите позже". Разумеется, эти запросы размазаны по времени, но чем больше операторов и чем медленнее СУБД, тем будет больше очередь. Кроме того, когда "вернулось ноль номеров", это может значит, что заявки закончились, тогда врубается пауза чтобы не кошмарить СУБД запросами, по истечении этой паузы все опять ломанутся за заявками, а из-за пауза ожидание увеличивается.
    Повторюсь, из-за скорости работы одиночного update, все должно быть норм, но если нет, то можно паузу делать немного рандомной, либо проверять попал оператор на блокировку или действительно закончились заявки и в первом случае не ждать, а снова мучить сервер.
    Теоретически, здесь хорошо подходит select for update skip locked - когда мы не ждем освобождения блокировки и уходим ни с чем, а просто берем следующую запись. Но нужно попробовать и убедится, что в конкретной СУБД все работает корректно.
  • Какой инструмент применить чтобы избавиться от блокировки таблиц в БД, если доступ нужен по очереди?

    @Vitsliputsli
    Оптимизируйте запрос, чтобы он выполнялся быстрее: добавьте соответствующие индексы, проверьте что транзакция открывается при самом запросе, а не где-то загодя. Вообще проверьте, что именно тормозит в выполнении транзакции. Почему транзакция блокирует таблицу? Почему всю таблицу? И почему вообще блокирует, какой у вас уровень изолированности транзакций?
    С учетом "есть таблица заявок, которые обзванивают операторы", что-либо сложнее делать нет смысла, вряд ли у вас там высокая нагрузка.
  • Не могу юзать namespace?

    @Vitsliputsli

    там не сказано, что php-код с namespace нужно вставлять в самый вверх html файла

    Наоборот, именно это там и сказано, только не html, а php. Напомню у вас php скрипт, а не html
  • В чем минусы событийно ориентированного подхода?

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

    @Vitsliputsli
    vitaly_74, сам факт - да. Но, одно дело, когда объект получает информацию что произошло событие: например, что подключился еще один пользователь, а "объект - счетчик подключений" реагирует инкрементируя внутреннюю переменную с кол-вом подключений. Другое дело, когда произошло тоже самое событие, и объект получает сообщение "инкрементируй счетчик". Т.е. он ввел понятие, что мы не манипулируем данными, скажем вызывая процедуру инкремента для переменной, которая принимает конкретный тип данных, а данные инкапсулированы в объект, который сам знает что делать, на основе сообщения в котором просьба провести инкремент счетчика. Это отличается от шаблона, когда subscriber получил только событие, а что он будет делать зависит от него. Если я, конечно, ничего не путаю.
  • В чем минусы событийно ориентированного подхода?

    @Vitsliputsli
    Насколько я помню, Алан Кей особо выделял что объекты взаимодействуют путем сообщений (message), а не реагируют на события (event). Т.е. объект получает информацию, не о том, что что-то произошло и реагирует на это, а получает предложение выполнить некое действие, а действие он выполняет исходя из того, каким объектом он является.
  • Почему эти значения равны в php?

    @Vitsliputsli
    Онотолий, неважно что говорю я, есть мануал, загляните в него:
    https://www.php.net/manual/en/language.types.type-...
    https://www.php.net/manual/en/language.operators.c...
    '9 9' == 9
    это сравнительный контекст, в котором в правой части число, а в левой части строка. Строка будет преобразована в число и получится 9. Сравнение 9 и 9 даст true.
    Начиная с php8 будут использованы иные проверки и результат будет другой.
  • Как на PHP подготовить вставить HTML в JSON строку?

    @Vitsliputsli
    Сергей Кореневский,
    А вообще странно то что функция json_encode() не хочет принимать строку.

    Все там "дописано", в легкую принимает:
    php > echo json_encode('q');
    "q"
  • Как на PHP подготовить вставить HTML в JSON строку?

    @Vitsliputsli
    Сергей Кореневский,
    Да у меня там JSON длинный. А создавать новый массив для сериализации как то не хочется.
    Тем более это вопрос экранирования и очистки.

    Это не вопрос экранирования и очистки, а вопрос написания велосипедов и разбирательств, что там в этом велосипеде накосячено. Затем, когда текщий косяк поправите, все свалится в другом месте на новых данных. И это при том, что есть уже готовое отлаженное решение.
    Какие причины этим заниматься?
  • Как написать многострочный скрипт в одну строку?

    @Vitsliputsli
    Sinot, да, возможно в sh или что там, echo соответствует echo -e в bash
  • Как написать многострочный скрипт в одну строку?

    @Vitsliputsli
    Sinot, там не bash используется, поэтому не распознает. Попробуйте так:
    printf "echo 1 \n echo 2" | bash
  • Как написать многострочный скрипт в одну строку?

    @Vitsliputsli
    Sinot, разумеется ; работает. Но, преобразовать многострочный скрипт в одну строку просто соединив все строки через ; не для всякого получится.

    На тестовом стенде стоит Ubuntu 22.04.1, именно эта конструкция в Zabbix не работает, если убрать -e - работает.

    Должно работать, тем более на ubuntu, покажите что пишет
  • Создание классов в цикле?

    @Vitsliputsli
    Павлуша,
    А я сделал так, чтобы все классы лежали в одном файле и все работало.

    Автозагрузку можно настроить как угодно, но выше писали, что есть стандарты PSR для автозагрузки, и всегда следуют им.
  • Создание классов в цикле?

    @Vitsliputsli
    Павлуша, как сделать из массива (более-менее нормальные решения):
    class MyClass
    {
      public function myFunction(): string
      {
        return get_class($this);
      }
    }
    
    class FirstClass extends MyClass {}
    class SecondClass extends MyClass {}
    
    foreach (['FirstClass','SecondClass'] as $className) {
        var_dump((new $className)->myFunction());
    };

    или так:
    class MyClass
    {
      public function __construct(private string $name) {}
    
      public function getName(): string
      {
        return $this->name;
      }
    }
    
    foreach (['first','second'] as $var) {
        $$var = new MyClass($var);
    };
    
    var_dump($first->getName());
    var_dump($second->getName());
  • Создание классов в цикле?

    @Vitsliputsli
    mrStrike, пока мы не знаем, какую задачу на самом деле он пытается решить, что либо утверждать нельзя.
    Если речь про алиасы, то это точно будет убого. Обращение к одному и тому же под разными именами, лишь будет путать.

    Скорее всего, автору нужно, как уже писали, банальное наследование. Но быть может и генерация классов, если, например, он будет собирать класс комбинируя методы.
  • $id_active_question - это какая нотация?

    @Vitsliputsli
    Дополню, camel case бывает 2х видов:
    1) выше описанный dromedary - $idActiveQuestion
    2) и Pascal, где все слова идут с большой буквы - $IdActiveQuestion

    В PHP по одной из самых распространненых нотаций названия классов пишутся по 2 варианту, а названия переменных по 1му:
    class TestClass {
        private $testVariable;
    }