• Какой лучше взять ORM?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это хороший вопрос, но ответ на него зависит от вашего уровня. Очень сильно зависит.
    Специалисты вам наверняка посоветуют Doctrine или Cycle. Но вы их явно не потянете.
    Для знакомства с ORM я бы порекомендовал Eloquent, при всех минусах этого выбора.

    Но если честно, то учитывая, что вы ищете замену RB, я бы порекомендовал начать с самого простого.
    spoiler
    Написать ORM руками. Причем даже не классический, поддерживающий связи и квери билдер, а совсем простой Table Gateway, типа такого:
    abstract class BasicTableGateway
    {
        protected $db;
        protected $table;
        protected $fields;
        protected $primary = 'id';
    
        public function __construct(\PDO $db)
        {
            $this->db = $db;
        }
        public function read($id): ?array
        {
            $stmt =$this->db->prepare("SELECT * FROM `$this->table` WHERE `$this->primary`=?");
            $stmt->execute([$id]);
            return $stmt->fetch();
        }
        public function insert($data): int
        {
            $this->validate($data);
    
            $fields = '`'.implode("`,`", array_keys($data)).'`';
            $placeholders = str_repeat('?,', count($data) - 1) . '?';
            $sql = "INSERT INTO `$this->table` ($fields) VALUES ($placeholders)";
            $this->db->prepare($sql)->execute(array_values($data));
            return $this->db->lastInsertId();
        }
        protected function validate($data)
        {
            $diff = array_diff(array_keys($data), $this->fields);
            if ($diff) {
                throw new \InvalidArgumentException("Unknown field(s): ". implode($diff));
            }
        }
    }

    И дальше применять его примерно так
    class UserGateway extends BasicTableGateway {
        protected $table = 'gw_users';
        protected $fields = ['email', 'password', 'name', 'birthday'];
    }
    $userGateway = new UserGateway($pdo);
    $data = [
        'email' => 'foo@bar.com',
        'password' => 123,
        'name' => 'Fooster',
    ];
    $id = $userGateway->insert($data);
    $user = $userGateway->read($id);
    echo json_encode($user),PHP_EOL;

    И никаких тебе "бинов" - обычный ПДО, обычные массивы, все просто и наглядно.


    Хотя пожалуй Dr. Bacon прав, вам и это будет сложновато. Возьмите лучше просто функцию:
    function pdo($pdo, $sql, $args = NULL)
    {
        if (!$args)
        {
             return $pdo->query($sql);
        }
        $stmt = $pdo->prepare($sql);
        $stmt->execute($args);
        return $stmt;
    }

    и дальше просто запросами

    // Create
    pdo($pdo, "INSERT INTO users VALUES (null, ?,?,?)", [$name, $email, $password]);
    // Read
    $user = pdo($pdo, "SELECT * FROM users WHERE email=?", [$email])->fetch();
    // Update
    pdo($pdo, "UPDATE users SET name=:name WHERE id=:id", ['id'=>$id, 'name'=>$name]);
    // Delete
    $deleted = pdo($pdo, "DELETE FROM users WHERE id=?", [$id])->rowCount();


    После того, как SQL будет отскакивать от зубов - можно будет посмотреть в сторону какого-нибудь ORM
    Ответ написан
    1 комментарий
  • В каком случае целесообразно изучать Java если ты php разработчик микросервисов?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Целесообразно изучать во всех случаях.
    Выбор позиции у вас от новых знаний расширится, а не сузится.
    Ответ написан
    Комментировать
  • Что подразумевает полный рабочий день?

    @hatman
    1) Если у тебя работа 8 часов, и начало работы в 10 утра, то работодатель и твои коллеги ожидают от тебя, что в любой момент с 10 до 19 (час на обед + 8) - они могут тебе написать, позвонить и ты оперативно выйдешь с ними на связь. И скажем, они буду ожидать, что если есть вопросы по какому-то коду, то IDEA/GIT и прочее у тебя будут открыты (т.е. ты в рабочей обстановке) - на какой-то доп вкладке смотреть сериальчик никто не мешает (лучше использовать другой браузер).

    2) Если тебе надо куда-то отвалиться на час-два, то работодатель ожидает, что ты согласуешь это со своей командой, уведомишь всех в общий слак, скайп итд и доработаешь потом время простое в "свободное" время.

    Самая главная проблема ребят на удаленке, что они путают удаленку и свободный график. Типа, когда хочу начинаю работать, когда хочу заканчиваю работать, когда хочу отваливаюсь. Нет, тут нужно быть доступным и в рабочем состоянии в определенный интервал времени. Ибо когда в тебя заходят ребята с каким-то вопросом в рабочее время, а ты в это время поехал в магазин или по девкам с мысленной формулировкой (доработаю часы ночью) - это увольнение.

    Что касается часов - просто списывай время на все, чем ты занимаешься (кодинг, митинги, созвоны с ребятами, консультация QA по своим таскам и так далее). Тогда получится, что ты кодил условно 5 часов, а времени списано в общем 7-8 часов.
    Ответ написан
    1 комментарий
  • Фриланс на Java, куда копать?

    dmitry_pavlov
    @dmitry_pavlov
    World-class .NET freelance contractor (remotely)
    Копать во все стороны. И это касается не только Java. Если есть интерес к фрилансу, то найдите все сайты по теме, зарегистрируйте, заполните профиль, ищите проекты там. Также смотрите все сайты о работе на предмет вакансий, где можно работать удаленно. Если владеете английским, то помимо русскоязычных ресурсов, сделайте то же самое на англоязычных ресурсах.

    Подготовьте хорошее резюме и/или как следует заполните профиль в сетях вроде LInkedIn. Почистите свои профили в соцсетях, чтобы там не было мусора (котиков, невнятных имен и мватаров) и было понятно чем вы заниаметесь, как с вами связаться. Поставьте там соответствующие статусы, которые четко дают понять что вам нужно (например "Java Developer. Available for remote job"). Файл и ссылка на профиль пригодятся дальше. А дальше - ищите проекты и объявления о работе, отправляйте заявки на них пока не найдется заказ.

    Можете почитать материалы о том как правильно и корректно себя вести с клиентами и вообще разнообразные советы по этому виду деятельности. Также в удаленной работе важно кроме знания технологий хорошо понимать процесс разработки (методологии, роли в команде, зоны ответственности), уметь вести коммуникацию в конструктивном ключе.

    Советую также осознать, что очереди на желающих вас нанять обычно нет. Это чтобы не было ложных ожиданий, что стоит только озвучить свое желание поработать в режиме фриланса, как тут же набежит толпа клиентов и завалит вас работой. :)

    Желаю удачи на нелегкой, но интересной ниве фриланса!
    Ответ написан
    Комментировать
  • Как интегрировать Doctrine 2 в 1С-Битрикс?

    serginhold
    @serginhold
    Ничего хорошего у тебя не получится.
    Но если очень хочется, то пишешь вот такой класс https://github.com/doctrine/dbal/blob/2.7/lib/Doct...
    разница будет в том, что ты должен туда подсунуть уже имеющийся коннект к \mysqli, вместо создания нового.
    Сам готовый коннект берешь из bitrix Connection::getResource().
    Далее смотришь доку и инициализируешь доктрину со своим драйвером.
    Нужно это для того, чтобы не висело два подключения к бд.
    Но если тебе пофигу, можешь просто создать второе подключение, и тогда вообще "красота" будет
    Ответ написан
    Комментировать
  • Как сейчас работают с Git?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Консольные команды вы обязаны знать и понимать что они делают, это не обсуждается. Но пользоваться лучше тем инструментом, который есть под рукой. Если среда разработки включает поддержку контроля версий, то нужно пользоваться. Это здорово ускоряет работу и позволяет визуализировать процессы. Глупо строчить команды в терминал, когда IDE позволяет то же самое сделать одним кликом мыши или вообще автоматически. Также вы не сможете одной только консолью так качественно разрешать конфликты слияния, как это позволяет тот же JetBrains. Из автономных графических клиентов безусловный лидер – SmartGit, сложные rebase делаю только в нём. Но некоторые вещи всё равно без консоли никак не сделать.
    Ответ написан
    Комментировать
  • За что отвечает require-dev в Composer?

    @harmoxyne
    Отвечает за те зависимости, которые необходимы только для dev-окружения.
    К примеру, Вы точно знаете, что библиотека phpunit нужна для разработки, а на проде будет лишней, тогда phpunit попадает в require-dev.
    Когда выполняется простой
    composer install
    устанавливаются и dev-зависимости.
    Когда выполняется
    composer install --no-dev
    устанавливаются только те зависимости, что в основном блоке require.

    Источник
    Ответ написан
    Комментировать
  • Как правильнее переопределить метод родительского класса?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Что именно вам не понятно в фразе
    Declaration of User::isExists() should be compatible with that of GlobalClass::isExists()

    Ее можно трактовать как

    определение метода User::isExists() не должно отличаться от GlobalClass::isExists()

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

    Учите принципы ООП и GRASP (можно по видио лекциям, тут нужно что бы объяснял кто-то).
    Ответ написан
    1 комментарий
  • Как работать в symfony env в продакшне?

    @Flying
    Ответ на ваш вопрос есть в документации Symfony:

    Начиная Symfony Flex 1.2 появилась команда composer dump-env prod которая создает обычный PHP файл из имеющихся у вас в .env файлах переменных, тем самым устраняя необходимость их разбора.

    Сам загрузчик Symfony Framework поддерживает загрузку переменных окружения из этого PHP файла.
    Ответ написан
    1 комментарий
  • Как определить компетентность на должность middle - senior php developer?

    varenich
    @varenich
    Аналитик
    Senior/Lead с моей точки зрения вообще не должен программировать. Его задача - использовать потенциал своей команды и принимать ключевые решения по проблемным ситуациям в архитектуре, кодинге, функциях, сроках и т.п.
    Ответ написан
    Комментировать
  • Что делать с хакерскими http запросами?

    @Mnemonic0
    WAF - это вам поможет. Баны по ип/регионам это как блокировка /8 сетей при пыпытке заблокировать Телеграм.
    Вкратце - прикрываешься CDN (Клаудфронт например) и в нём настраиваешь проверку AWS WAF - 95% всех попыток взлома будет закрыто.
    Остальные 5% будет сильно дороже закрыть, всё зависит от денег, которые потеряются от простяо сайта.
    Ответ написан
    3 комментария
  • Зачем делают backend на разных языках?

    Nipheris
    @Nipheris Куратор тега C++
    Подскажите зачем пишут backend на нескольких языках?

    Почему-то никто не сказал главный аргумент - в больших проектах понятие бэкенда весьма условно. В больших проектах уже нет одного веб-приложения, которое написано на одном языке и выполняется на одном-двух серверах. В больших проектах бэкенд - это уже набор сервисов, зачастую разнородных, иногда даже не общающихся между собой, а работающих непосредственно с клиентом (гуглите микросервисную архитектуру). Пример из нашей компании:
    - веб-приложение на джанге, отдающее html-контент - тут авторизация юзеров, хранение пользовательских настроек и данных;
    - сервис данных чарта - написан на Erlang для предельной стабильности и предсказуемости, а также из-за легковесных потоков (в BEAM неплохой вытесняющий планировщик);
    - сервис расчёта фин. индикаторов - написан на Java, данные отдаёт через сервис на Эрланге;
    - сервис сканирования бирж - написан на Go (много новых сервисов на нём пишем).
    - и ещё несколько более мелких сервисов.

    Каждый из этих сервисов - это даже не отдельные люди, это целые команды со своей историей, со своими требованиями к надёжности и производительности и со своей культурой в конце-концов. Сервисы очень крупные, даже если что-то не устраивает и хочется переписать на другой платформе (например, с Эрланга на Го), никто не будет этого делать просто потому что хочется, это огромные деньги и куча человеко-лет.
    Ответ написан
    Комментировать
  • Воркеры php-fpm неожиданно начинают потреблять значительно больше CPU?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Смотрите логи, отслеживайте запуск программ. Отчетливо видно, что у вас каждые 10 минут что-то запускается (маленькие короткие всплески), ну и каждые 30 минут - уже известный вам php-fpm. Но в какой-то момент что-то происходит, что поднимает нагрузку на CPU на заметный уровень. Если нагрузка снимается перезапуском php-fpm - тогда что вам стоит перед перезапуском проверить нагрузку системы (вывод top/htop/iotop/ps axf...)? Ну и логирование работы php-скриптов, которые работают под php-fpm, разумеется.
    Ответ написан
    Комментировать
  • Важна ли бьютификация кода?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Бьютификация увеличивает размер кода. Гляньте на реакт, там вообще все в одну строчку.
    А кому нужно тот запустит дев консоль.
    Ответ написан
    Комментировать
  • Как выбрать версию php для композер?

    gedev
    @gedev
    сисадмин-энтузиаст
    Можно добавить в файл ~/.bash_profile (если надо для одного юзера) или в файл /etc/profile (если надо для всех пользователей на сервере):

    export PATH=/opt/php74/bin/:$PATH
    alias composer='/opt/php74/bin/php /usr/local/bin/composer'

    Затем перелогиньтесь. Готово.
    Ответ написан
    Комментировать
  • Насколько актуален чистый PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Цель какая?
    Устроиться наконец на работу? Стать "разработчиком на чистом пхп"? Писать модули на Си для пхп?
    Если первое - учите фреймворки, тот же ларавель, идите работать, учитесь у коллег, читайте книжки, смотрите хорошие курсы... Во первых так вы сразу убиваете 2 зайцев - и учитесь и получаете деньги. Во вторых, если вы этого не знали, вы ВСЕ РАВНО будете практически всю жизнь учиться и читать, если уже пошли по этой кривой дорожке.
    Ответ написан
  • Как работать с websocket в php без библиотек?

    Я раньше тоже писал свой вебсокет-сервер на php с нуля, о чём написал статью на хабре, а весь код опубликован на гитхабе.
    В комментах к статье были полезные советы и моменты, которых я изначально не учитывал. В итоге сделал несколько реализаций.
    Сейчас же использую workerman. У него большое комьюнити, понятный код и никаких зависимостей от сторонних библиотек.
    Ответ написан
    9 комментариев
  • Есть ли готовые решения для контроля уровня CO2 в помещении?

    Jump
    @Jump
    Системный администратор со стажем.
    Как люди жили до изобретения датчика CO2?
    Вентиляцию надо нормальную сделать и все.
    Тогда нет необходимости проветривать.
    А CO2 измерять смысла нет.

    Решил купить кондиционер, который бы сам проветривал помещение при превышении CO2, но с удивлением не обнаружил ничего подобного в магазинах.
    Решил купить миксер и с удивлением обнаружил что нет миксеров умеющих мыть посуду?
    Какое вообще кондиционер может иметь отношение к проветриванию???
    Проветривание это приток свежего воздуха.
    А задача кондиционера это регулировка температуры путем охлаждения воздуха.
    Ответ написан
    9 комментариев
  • Есть ли готовые решения для контроля уровня CO2 в помещении?

    15432
    @15432
    Системный программист ^_^
    Есть штука под названием бризер

    https://habr.com/ru/post/482352/
    https://habr.com/ru/company/tion/blog/

    И да, если что, обычный кондиционер нисколько не "проветривает", а просто гоняет воздух внутри помещения
    Ответ написан
    3 комментария