Задать вопрос
  • Как правильно написать маршрутизация на php с регулярными выражениями?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. Что такое роут?
    Это некая сущность, умеющая проверять, подходит ли она для запроса, или нет.
    2. Что такое роутер?
    Это объект, умеющий выбирать подходящий роут по запросу и возвращать его.

    Рекомендую создать:
    1. RouteInterface с методами: supports(Request $request): bool
    2. Создайте интерфейс RequestRunnerInterface: run(Request $request): Response
    3. Создайте RegExpRoute, который будет уметь по регулярке проверять запрос. Там же имплементируйте оба интерфейса.
    4. Создайте Router, в который можно будет по интерфейсу насетапать роуты
    5. Процесс выполнения будет примерно такой:
    - создать объект Request
    - насетапать роуты
    - занести роуты в роутер
    - получить роут по запросу
    - для роута с имплементацией 2-го интерфейса выполнить run
    - отрендерить ответ
    - завершить выполнение

    НЕ используйте глобальные и суперглобальные переменные, начале выполнения создайте HttpFoundation Request и работайте с ним.
    Ответ написан
  • Существуют ли сервисы просмотра php кода сайта?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Gitlab/github/bitbucket
    Ответ написан
    Комментировать
  • Почему у git свои rsa ключи?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Потому, что конкретно у putty свои ключи, у всего остального мира:
    ssh-keygen -t rsa
    Ответ написан
    Комментировать
  • Как выбраться из ямы, которую вырыл себе сам?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Что вам стоит провести поиск по сайтам типа hh/work.ua/... (но ориентированных на вашу страну) с целью понять, являетесь ли вы специалистом более высокого уровня? WP - эт как ни крути ширпотреб, со всеми вытекающими.

    Что касается нелегального устройства - ищите способы перестать быть нелегалом.
    Ответ написан
  • Githab. Возможно ли связать два репозитория?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    git submodules, правда если это дело на php - используйте composer и не мучайте себя просто так
    Ответ написан
  • Как узнать сколько тактов уходит на исполнение чего ни будь написанного на PHP?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Как узнать, сколько литров бензина уходит на преодоления какого ни будь пространства на фольксвагене?
    Ни модели машины, ни дорог, ни погодных условий вам не дано))

    php преобразуется в опкод, причем в первый раз выполняться будет дольше, так как файлы читаются с диска и интерпретируются, второй раз (уже с оперативки в виде опкодов). Это список опкодов зависит от версии php, платформы, разрядности, и т.д. Количество тактов процессора - это бесполезная характеристика в данном случае.

    Что касается самих опкодов - можете покурить https://derickrethans.nl/projects.html#vld на досуге, как пример, это выглядит так: https://3v4l.org/Zu5rp/vld#output

    Если же вам нужно оптимизировать производительность - xhprof ваше все.
    Ответ написан
    Комментировать
  • Какой ноутбук выбрать для графического дизайна (что бы не тупил)?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Если ездить с ноутом не особо собираетесь - берите стационарник, либо нафаршируйте свой.
    4GB RAM - хз, как вам хватает, мне 16 часто бывает мало)) Я бы на вашем месте сначала установил 2 планки по 8.
    Ответ написан
    Комментировать
  • Можно ли получить public переменную не инициализируя сам класс?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    нет, при условии, что она не статическая
    Ответ написан
    3 комментария
  • Как правильно использвать базы данных на странице php?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    в каком месте нужно закрывать соединение с БД?

    Перед завершением процесса. Хотя оно и так закроется.

    В каждом методе?

    Нет, постоянные реконнекты будут дорого стоить.

    --- Немножко Code Review ---

    // Не давайте общие имена конкретным реализациям
    // Почитайте, проникнитесь и используйте PSR-2 и PSR-4
    class DataBase
    {
        private $mysqli;
        private $dbConfig;
    
        public function __construct()
        {
    // Класс по работе с БД не должен знать даже о существовании неких файлов, где-то там. Это не его забота.
    // Передавайте в конструктор готовое подключение к БД, если нужно.
            $this->dbConfig = require "db/database_config.php";
    // Вот никак понять не могу, за что так любят этот mysqli, ну что в нем прям такого раз такого, по сравнению с PDO?
            $this->mysqli = mysqli_connect($this->dbConfig['host'], $this->dbConfig['username'], $this->dbConfig['password'], $this->dbConfig['db_name']);
    // Почему вдруг класс по работе с БД занимается операцией вывода?
    // Если что-то не так - бросайте исключение, ни каких echo, die, exit, trigger_error
            if (mysqli_connect_errno($this->mysqli)) {
                echo "Не удалось подключиться к MySQL: " . mysqli_connect_error();
            }
        }
    // Вы не проверяете аргументы, это плохо, очень.
    // Что бы нагнуть ваш проект достаточно передать в любой из аргументов: '1; DROP TABLE employees;'
      public function getEmployees($where='1',$start, $perPage){
    // ЗАБУДЬТЕ про подстановку данных через конкатенацию, используйте плейсхолдеры
    // http://php.net/manual/ru/pdo.prepared-statements.php
            $sql="SELECT e.name,e.birthday,d.title_dep,p.title_pos,t.title_type,e.salary FROM `employees` AS e INNER JOIN departments AS d ON e.id_dep=d.id
    INNER JOIN positions AS p ON e.id_pos=p.id
    INNER JOIN payment_types AS t ON e.id_type=t.id  where $where LIMIT $start,$perPage";
    
    // Вам ни переменная $res, ни $row не нужны
            $res = $this->mysqli->query($sql);
            $row=$res->fetch_all(MYSQLI_ASSOC);
            return $row;
        }
    }
    Ответ написан
    2 комментария
  • Интернет магазин софта?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    AppStore, Google Play, Microsoft Store, Steam,... + за частую у каждого производителя ПО есть свой. Плохо искали
    Ответ написан
  • Почему говорят, что ООП это зло?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Глупости. ООП - очень мощная парадигма. Бывают кейсы, когда она слишком накладна, это правда, но заявлять, что она зло...
    Безусловно, если обмазываться всякими хаскелями, лиспами, эрлангами, скалами... где ООП парадигма может не давать профита, либо не применима вовсе - конкретно в тех языках ее использовать и не нужно.
    В языках же заточенных по ООП парадигму - ФП с большой вероятностью будет плохой идеей.

    Как то статья была, жаль не нашел (если кто найдет - отпишите в комментариях пожалуйста), со сравнением ООП и ФП, одним из тезисов было сравнение существующих принципов и паттернов, в ООП: наследование, полиморфизм, инкапсуляция, SOLID, IoC, ServiceLocator,... а у ФП: функции, функции, функции...

    ФП сейчас набирает популярность, однако много людей, в том числе из моих знакомых, ярых поклонников этого направления вернулись обратно к "классике", в основном причина была такая: слишком высокая цена поддержки.
    Ответ написан
    2 комментария
  • Какие есть специальности в IT без глубоких навыков программирования?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Porject Manager
    Product Manager (Product Owner)
    Analyst
    SEO
    SMM
    Ответ написан
    7 комментариев
  • Возможно ли написать универсальный обработчик форм?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Это бессмысленно. Чем универсальнее будет ваш обработчик - тем сложнее будет им пользоваться. Что произойдет, когда данные будут отправляться в виде json например, а не url-кодированной строки?

    Вместо этого рекомендую следующий подход

    use Symfony\Component\HttpFoundation\Request;
    
    class LoginForm
    {
        /** @var string */
        private $login;
        /** @var string */
        private $password;
    
        /**
         * @param Request $request
         */
        public function __construct(Request $request)
        {
            $login    = $request->request->get('login');
            $password = $request->request->get('password');
    
            if (is_null($login)) {
                throw new \InvalidArgumentException('Parameter "login" is required');
            } elseif (!is_string($login)) {
                throw new \InvalidArgumentException('Parameter "login" must be string');
            } elseif (strlen($login) < 3) {
                throw new \InvalidArgumentException('Length of parameter "login" must be greater than 3');
            } elseif (strlen($login) > 64) {
                throw new \InvalidArgumentException('Length of parameter "login" must be less than 64');
            } elseif (preg_match('/^[a-z\d]+$/i', $login) === 0) {
                throw new \InvalidArgumentException('Parameter "login" contain not allowed symbols');
            }
    
            if (is_null($password)) {
                throw new \InvalidArgumentException('Parameter "password" is required');
            } elseif (!is_string($password)) {
                throw new \InvalidArgumentException('Parameter "password" must be string');
            } elseif (strlen($password) < 6) {
                throw new \InvalidArgumentException('Length of parameter "password" must be greater than 6');
            }
    
            $this->login    = $login;
            $this->password = $password;
        }
    
        /**
         * @return string
         */
        public function getLogin(): string
        {
            return $this->login;
        }
    
        /**
         * @return string
         */
        public function getPassword(): string
        {
            return $this->password;
        }
    }


    Да, кода получается много, но вы гарантировано получаете корректные данные с помощью геттеров. Если нужно будет создавать некие DTO, или VO - прямо в конструкторе это можно сделать. Такой класс прост в тестировании и поддержке.
    Ответ написан
  • Где можно заказать составление резюме программиста на английском?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Это бессмысленно. За резюме идет собеседование. Если вы уже составили его на английском - будьте готовы и говорить на английском, хотя бы на ломанном. В противном случае как кадр вы сразу же позиционируете себя не с лучшей стороны.

    -- update --

    В свое время я провел около 50 собеседований, могу вам сказать следующее: красивое резюме - это повод обратить на вас внимание, не более того. Как-то раз к нам пришел паренёк с шикарным резюме, если верить резюме - передо мной был гуру. Когда я начал задавать вопросы - оказалось, что его резюме - это просто сказка, никак не связанная с действительностью. Собеседование проходило минут 5, паренёк работу не получил. Не повторяйте его ошибок.
    Ответ написан
    Комментировать
  • Грамотно-ли написан класс работы с БД?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Используйте доктрину DBAL для начала, если будет мало - ORM.

    -- Немножко Code Review --
    // Используйте PSR-2. Стандарт оформления кода не просто так придуман.
    // Кстати, это MySQL БД, или PostgreSQL, или sqlite? Не стоит давать общие имена для конкретных реализаций.
    class DataBase {
    // Достаточно такого:
    // /** @var \PDO */
    // private $connection;
        private $connectDataBase;
    
        // конструкция подключения к БД
        function __construct () {
    // Вот никак не могу понять, чего народ так упорно  mysqli любит, ну что там такого прям раз такого, по сравнению с PDO?
    // Передавайте готовое подключение в конструктор, а не создавайте его там.
            $this->connectDataBase = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
            if ($this->connectDataBase->connect_errno) {
    // С какого класс по работе с БД управляет процессом и выводом? Если что-то пошло не так - бросайте исключение. Конструкцию die - забудьте.
                die('Connect Error (' . $this->connectDataBase->connect_errno . ') ' . $this->connectDataBase->connect_error);
            }
        }
    
    // Не пишите бесполезных комментариев
        // метод подготовленного запроса к базе
        function query ($sql) {
    // Зачем вам переменная $result?
            $result = $this->connectDataBase->query($sql);
            return $result;
    
        }
    
    }
    Ответ написан
    2 комментария
  • Куда правильнее поместить и как назвать файл с функциями?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Существует. Откажитесь от функций и суффиксов .class.php. Прочитайте про PSR-4 и пользуйтесь им вместе с composer
    Ответ написан
    Комментировать
  • Как отказать так, чтобы не порвать отношения с заказчиком?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Цель любой работы - это получение выгоды. Скажите прямо, что вас не устраивает цена.
    Ответ написан
    Комментировать
  • Как не начать говн*кодить?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Попробуйте следовать этим требованиям и ваш код будет далеко не совсем говном.
    Ответ написан
    Комментировать
  • Смысл систем сборок Gulp, Grunt и т.д?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смысл таск ранеров в том, что бы упростить и автоматизировать рутиные задачи. Сборку можно сделать да хоть на bash скриптах. Grunt/Gulp - просто заточены под это и просты в изучении.
    В команде намного проще использовать подобные средства, чем выполнять все задачи поднятия проекта в ручную.
    Например при сборке фронта вам требуется:
    1. Проверить исходники через eslint
    2. Минифицировать js код, и для dev сборки притянуть сорс мапы
    3. Собрать css из кучки взаимосвязанных less файлов и тоже минимизировать.
    4. Шаблоны собрать из jade например, или любого другого шаблонизатора
    5. Прогнать unit тесты

    Безусловно, можно все эти шаги выполнить полностью в ручную, однако на много проще один раз этот процесс описать в инструкции для сборки и вызывать что-то в стиле gulp build
    Ответ написан
    Комментировать
  • Стоит ли сейчас делать киносайт?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Стоит ли сейчас делать киносайт?

    Если согласно бизнес плану вашего друга этот сайт будет приносить прибыть - вполне возможно.

    Но если очень хочется, то может стоит ли попробовать сделать что-то эдакое?

    хз что сказать, хотите пробовать - пробуйте.

    Но возможно ли такой сайт сделать хоть немного популярным?

    Вполне, опять же, посмотрите бизнес план, часть с монетизацией и раскруткой должна быть продумана.

    Нужны ли такому сайту форумы, блоги, комментарии или какая-либо другая интерактивность?

    Смотрите техническое задание (в крайнем случае бриф), там должно это быть.
    Ответ написан