Задать вопрос
  • Как справиться с синдромом самозванца на новом месте?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Очень сильно помогает от синдрома самозванца возможность заглянуть в код чрезвычайно уверенного в себе разработчика, получающего 300k в секунду, и обнаружить там лапшу с детскими ошибками.
    Ответ написан
    Комментировать
  • Как создать таблицу с двумя колонками обязательно разного значения?

    @immelnikoff
    Изучаю БД
    Начиная с версии MySQL 8.0.16 (ссылка):
    CREATE TABLE t1
    (
      column_id  INT,
      other_column_id INT,
      CONSTRAINT qwe CHECK (column_id <> other_column_id)
    );
    Ответ написан
    1 комментарий
  • В чем разница между dependency injection и методом, который возвращает тип класса?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В чем разница между поехать в отпуск и футболом?
    И в том и в другом случае мы будем носить обувь.
    Вот пример: в холодильник можно поставить пиво, а по карточке можно снять деньги в банкомате.

    Ты, во-первых, не понимаешь что такое dependency injection, а во-вторых - что делает твой код.

    Если отбросить все умные и красивые слова которые ты тут наскреб по сусекам, то оба твоих примера - про type hinting. Только в первом кусочеке кода мы просим интерпретатор проверять входящий параметр, а во втором - возвращаемое значение.
    Type hinting двольно размытый термин, мне больше нравится "контроль типов", который используется в документации. Поскльку в данном случае это не "подсказка", а строгий контроль: скрипт упадёт с ошибкой если в первом примере в метод придет что-то отличное от класса реализующего интерфейс Foo, а во втором - если метод вернет что-то отличное от такого класса.

    Контроль типов надо использовать, чтобы твой код был чище и работал предсказуемее.

    При этом dependency injection вообще не имеет никакого отношения ни к твоим примерам, ни к контролю типов. Внедрение зависимости относится к классам, а не методам. И означает, что если твой класс использует в работе какие-то инструменты, то он берет их не из воздуха - из всяких жлобал, синглетонов, контейнеров, или клепает прямо на месте - а явно получает при создании в виде параметров конструктора.
    Внедрение зависимостей следует использовать, чтобы твой код было легче изменять и поддерживать.
    Ответ написан
    6 комментариев
  • Как лучше продемонстрировать проекты потенциальному работодателю?

    Zoominger
    @Zoominger
    System Integrator
    тоит ли заморочиться и по каждому проекту снять видосик с демонстрацией основных функ.возможностей ( ~2 минуты )

    Никто это смотреть не будет.

    Иил заморочиться еще больше, подключить статику, перебросить порты с роутера на старый ноут и развернуть на нем все проекты?

    This.
    Или не жадничать и купить хостинг за 200 рублей в месяц, где и развернуть свои поделия.
    Ответ написан
    1 комментарий
  • Как можно удалить элемент из array_map?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Очередной эстет блин.
    Потом разгребай за такими код.
    Что здесь "некарасивого"?
    Ты не на вернисаж пришел.
    Код должен быть не "красивым", а делать что нужно, быть эффективным и читабельным.
    Явный цикл с явным условием - это кинтэссениция читабельности, любой, кто его увидит, сразу поймет что он делает.

    Если глаза прямо не могут смотреть на 4 строчки - сделай функцию. Нормальную функцию, которая вызывается в 4 слова, а не через хитрую вложенную конструкцию с подвыподвертом, которую тебе уже тут советуют
    Ответ написан
    Комментировать
  • Чем плохо выносить повторяющиеся элементы дизайна в отдельные файлы и подключать их потом с помощью PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Тут, как обычно, не одна проблема, а три.

    Первая проблема - это, как всегда, неумение задавать вопросы.
    Вот и сейчас - вопрос "чем плохо ходить пешком?" Что можно ответить на этот вопрос?
    Но потом выясняется что вопрос на самом деле "Я живу в 20 километрах от работы. Чем плохо ходить на работу пешком?".

    То есть вопрос у нас на самом деле, "Чем плохо выносить повторяющиеся элементы HTML в отдельные файлы и подключать их потом с помощью include?". Этот вопрос уже будет более осмысленный, и на него даже можно дать ответ не выглядя при этом идиотом.

    Вторая проблема заключается в том, что подход с "хидером и футером" реально неудобен и устарел уже лет 20 как. И вместо него используются шаблонизаторы. Тупо редактировать хтмл удобнее когда он лежит в одном файле, а не в header.php. footer.php. menu.php, banners.php и еще 10 файлах.
    И это я даже не заикаюсь о случае, когда на разных страницах надо поключать разные файлы стилей и скриптов.

    И третья проблема заключается в том, что хотя в принципе и можно что-то несложное накалякать с хидером и футером, но поголовно все новички все равно клепают их неправильно - а именно вкрячивают хидер до того, как скрипт вообще начнет работу. И потом имеют все прелести невозможности вывести НТТР заголовок, поменять что-то в хидере в зависимости от выводимых данных, поменять формат вывода или аварийно завершить работу.
    Ответ написан
    Комментировать
  • Как использовать PDO в других классах?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос хороший и правильный. Всё остальное - не очень.
    К сожалению, то что у тебя сейчас - это тоже говнокод и неправильно.

    Тут надо понимать одну очень простую, но очень неприятную вещь: ООП, в отличие от ПХП - это сложная тема. Явочным порядком, там подглядев, тут скопипастив - ООП изучить нельзя.
    Максимум что у тебя получится - это та же процедурщина, вид сбоку. Неподдерживаемый говнокод, просто по-обезьяньи обернутый в классы.

    Но учиться все равно надо.
    Главное что надо понимать про ООП - оно не про сами классы, а про их взаимодействие.
    именно поэтому то самое жлобал и является говнокодом. Потому что никакого взаимодействия нет ,и класса тоже нет - есть функция, которую если вынуть из класса, то НИЧЕГО не изменится.

    Но и то что у тебя сейчас - это не ООП.
    Каждый раз создавать новое подключение можно и без всякого ООП. Вот только оно убьёт тебе сервер БД.
    Чтобы было ООП, надо передать уже созданный инстанс класса для работы с БД как параметр конструктора.

    Кроме того, класс qpdo - это какой-то анекдот, бессмыслица. Обезьяна увидела как человек носит очки, напялила на нос ложку и ходит с гордым видом. Внешне вроде то же самое, но смысла никакого.
    Ты можешь объяснить, ЗАЧЕМ тебе класс qpdo? Чтобы настройки прописать? А ты подумал что настройки бывают РАЗНЫЕ? Что дома у тебя логин рут и пароль пустота, а на хостинге это не прокатит. И что - будешь код переписывать, каждый раз заливая из дома на сервер? Серьёзно?
    Настройки должны всегда лежать отдельно. А больше ни для чего твой класс не нужен.

    Поэтому,

    1. qpdo выкинуть на помойку, по крайней мере до тех пор, пока не поймешь, для чего тебе свой класс, и как с ним обращаться.
    2. Создать один раз инстанс класса для работы с БД (в простейшем случае - PDO) и передавать в другие классы через констркутор
    3. в конструкторе присваивать его переменной класса, которую использовать для доступа к БД.

    В итоге возвращаемся к исходному вопросу, как передать соединение в другой класс:
    class somethingClass {
      function __construct($db) {
        $this->db = $db;
      }
    
      function somethingFunction(string $key) {
        $query = $this->db->prepare("SELECT `key` FROM `table` WHERE `key` = :key");
        $query->execute(array(':key' => $key));
        return $query->fetchColumn();
      }
    }


    Бонус
    echo 'Ошибка подключения к БД MySQL: ' . $error->getMessage() . ''; die;
    - это ад и говнокод.
    Да, в прошлом веке так писали. С тех про прошло уже 20 чертовых лет. 20, Карл! Тебя небось еще в проекте не было.
    Сайт, который вываливает вот это всё на всеобщее обозрение - это позор.
    Все ошибки сайт должен всегда держать при себе. И никому не показывать. И поэтому никогда не надо лезть руками в ту ошибку, которую выбрасывает РНР. Надо дать ей спокойно пойти туда, куда идут все остальные ошибки.
    Ответ написан
    Комментировать
  • Как запустить команду терминала linux через php в браузере?

    Adamos
    @Adamos
    Как вариант - настроить веб-сервер так, чтобы .php обрабатывал Пых, а .py - Питон.
    Если этот скрипт действительно ничего больше не делает.
    Ответ написан
    Комментировать
  • В чём заключается ошибка?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT .. INTO предназначен для помещения скалярного значения в скалярную же переменную. То есть он должен вернуть строго одну запись.

    Показанный запрос явно возвращает более одной записи. И Оракл в недоумении - из какой записи набора ему предлагается взять значение для помещения в переменную?

    И самое что интересное - Вы об этом знаете. Ибо по тексту имеется литерал 'стоимость поступивших товаров ='. Не "товара", а "товаров".

    Если Вам нужна сумма стоимостей всех товаров - то оберните выражение в SUM().
    Ответ написан
    Комментировать
  • Как разбить get запрос и занести все в свои переменные?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не нужно никогда get запрос заносить ни в какие переменные.
    Никогда не надо заниматься такой фигнёй, как выковыривание элементов массива в отдельные переменные.
    Массив для того и придуман, чтобы работать с изменяемой неструктурированной информацией

    Поэтому если тебе надо получить 1, то прсто пишешь $_GET['count']. ВСЁ. Никаких тебе страданий и проблем.
    Ответ написан
    Комментировать
  • Почему Linux предпочтительнее для администрирования и чем? Почему многие предпочитают её?

    dyuriev
    @dyuriev
    A posteriori
    Скорее всего под таким вопросом начнется всем уже известный срач. А пару человек еще упрекнут вас в том, что у них 30-50-70 процентов серверов под FreeBSD

    Мое скромное мнение
    • Бесплатность
      Да, сейчас кто-нибудь заявит о том что на Red Hat не дешевле, а иногда и дороже Windows, но большинство дистрибьютивов Linux бесплатны
    • Открытость
      Данный факт не ценишь ровно до того момента, как приходится сделать что-то, что не разжевано в интернете. Рано или поздно разработчик доходит до того момента, когда ползет в исходники с глубоким душевным вопросом "как это %&$ должно работать?". Ибо некоторые моменты либо документированы неправильно, либо не полностью, либо в коде досадная ошибка, которую никто не замечал ранее, ну или замечал, но багрепорт/коммит с фиксом разрабу не кидал.
      В Windows-среде, особенно если это сама система, а не прикладной софт, данный баг может вылиться в недели или месяцы страданий. Там только реверс-инжиринг, если саппорт вас игнорит.
    • Документированость
      Команда не сработала как ожидалось? man commandname
      Не помогло? Гляньте сайт разработчика, там обычно на столько обширное вики/документация, что увлечетесь чтением.
      Программа свежая и документация пока не исчерпывающая? Гляньте репозиторий, поиском найдите по исходнику место которое хотите вызвать параметрически - скорее всего там увидите комментарий разраба, кто писал этот код, заодно еще парочку недокументированных возможностей почерпнете.
      В конце концов, если вдруг вам станет интересно, почему сделано так, а не иначе - гляньте багзиллу проекта - скорее всего поиском найдете обсуждение данного куска кода.
    • Гибкость
      Воткнуть свой драйвер в прямо в ядро? Легко (если уж научитесь драйвера писать, то внедрить в ядро особых проблем не составит)
    • Повсеместность
      Че уж там сервера. Роутеры, телефоны, embedded-решения - там везде в кулуарах за редким исключением крутится ядро Linux и знакомые пакеты и команды. Этакая стандартизация.
    • Эффект IKEA
      Вы сами того не подозреваете, но когда по кирпичикам соберете этот чертов конструктор, заставите каждый винтик крутиться (с вероятностью стремящейся к 100%) так как вам надо, вы полюбите эту систему.

    И еще раз напоминаю, что это мое скромное личное мнение.

    Несомнено, сервера и на Windows бывают быстрые, стабильные, работающие 24/7/365 годами. Но так уж повелось.
    Ответ написан
    2 комментария
  • Как избавиться от ненужных символов на сайте, которые выводит php-скрипт?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Чтобы избавиться от ненужных символов на сайте, надо избавиться от бессмысленных телодвижений в своём коде.

    Я уж не знаю, какой клоун подсказал тебе делать shell_exec(‘sed -n 2p ./icemeta.txt’); (что само по себе уже дичь, независимо от решаемой задачи), но XML надо читать нормально, а не вырезать из него строчки через спину автогеном.

    Вообще запомни простое правило - для каждого специального формата в РНР есть специальные средства работы с ним. И надо всегда использовать только их. Иначе твои "ненужные симолы" покажутся безобидным баловством на фоне других проблем.

    В данном случае вместо всего этого винегрета надо использовать simplexml_load_file(), и дальше рабтать с полученным объектом.
    Ответ написан
    1 комментарий
  • Какие бд используют для динамических сайтов?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Разные. Чаще всего MySQL и PostgreSQL.
    Ответ написан
    Комментировать
  • С чего начать джуну в бэкэнде?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Хочешь стать программистом - учи сначала языки (PHP, SQL, плюс хотя бы базово JS, HTML), потом фреймворк
    Хочешь стать ремесленником, типа сапожника 100 лет назад - учи цмс.
    Ответ написан
    5 комментариев
  • Какой язык подходит для крупных веб-проектов?

    VlasenkoFedor
    @VlasenkoFedor
    Программист: php, js, go
    крупные проекты не являются монолитом одного языка, фреймворка и технологий
    архитектор проекта выбирает технологии, фреймворки исходя из поставленных задач, нагрузки и функциональности учитывая трудовые ресурсы
    Ответ написан
    Комментировать
  • Переменные отнимаются не правильно, как исправить?

    @d-sem
    $quantity_first = fopen('quantity.php', w);


    fopen возвращает ресурс который приводится к инт 5. https://www.php.net/manual/ru/function.fopen.php

    а далее 1 - 5 = -4

    если нужно считывать данные из файла то или работать с указателем или использовать file_get_contents https://www.php.net/manual/ru/function.file-get-co...
    Ответ написан
    3 комментария
  • Не рано ли изучать Rust?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Первым лучше учить тот язык, на который реально много вакансий. Это не только не Rust, но даже и не Go.
    Ответ написан
    7 комментариев