Задать вопрос
  • Обьясните в чём суть инкапсуляции?

    Инкапсуляция защищает не от хакеров, а от неправильного использования объектов.
    Как пример - у тебя может быть класс "Заказ" и у него может быть какой-то статус (оплачен/ждёт оплаты/отменён итд).
    При этом у тебя могут быть правила типа: уже оплаченный заказ не может стать вдруг неоплаченным, а отменённый заказ нельзя взять обратно в работу.
    Тогда логично будет сделать поле статуса приватным (не доступным для изменения извне напрямую), а менять его только через методы, где будет происходить вся валидация.
    (В некоторых языках такие правила принято описывать на уровне типов, чтобы даже валидаций никаких было делать не нужно)

    Приватные поля объекта - это его состояние.
    Методы объекта - это способы его использования.

    Если у тебя в объекте появляется поле x и методы getX / setX (или авто геттеры/сеттеры в C#), то значит, что у тебя и нет явных причин делать это поле приватным, кроме соблюдения общепринятых соглашений.
    Ответ написан
    15 комментариев
  • Как c Http клиентом переписать CURL запрос с опцией F?

    1. Выясняешь, что означает этот параметр
    https://curl.se/docs/manpage.html
    В нашем случае это отправка form data с выставлением соответствующего заголовка.

    2. Гуглишь, как это сделать с той библиотекой, которую ты используешь.
    В laravel используется guzzle, так что сразу гуглим для него.
    Находим, что он умеет так делать:
    https://docs.guzzlephp.org/en/stable/quickstart.ht...
    Ответ написан
    Комментировать
  • Как выполнять отладку на php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Правильный подход - установка xdebug и пошаговая отладка.

    Есть и более простые методы, например:
    Использовать var_dump()/print_r() в нужных местах, чаще всего этого достаточно для отладки небольших скриптов.
    Включение вывода ошибок в аутпут тоже помогает(либо в пхп.ини меняем соответствующие настройки, либо в коде в начале добавляем
    ini_set('error_reporting',E_ALL);  ini_set('display_errors', 1);

    ), хотя по умолчанию все пишется в лог ошибок и можно посмотреть их там (но опять же, для небольших скриптов это норм).
    Ответ написан
    Комментировать
  • Есть что то проще чем php?

    Братку это делается за 3 секунды на пхп
    там вообще изи.
    прям совсем, просто переименуй файл с html в пхп там прям совсем минимум.
    зайди онлайн на любой сайт с GPT и попроси его сделать пример.
    100% даст сразу правильный ответ

    создай header.php
    <!-- header.php -->
    <!DOCTYPE html>
    <html lang="ru">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Мой сайт</title>
        <link rel="stylesheet" href="styles.css">
    </head>
    <body>
        <header>
            <h1>Добро пожаловать на мой сайт</h1>
            <nav>
                <ul>
                    <li><a href="page1.php">Страница 1</a></li>
                    <li><a href="page2.php">Страница 2</a></li>
                    <!-- Добавьте другие ссылки -->
                </ul>
            </nav>
        </header>


    создай footer.php
    <!-- footer.php -->
        <footer>
            <p>&copy; 2023 Мой сайт. Все права защищены.</p>
        </footer>
    </body>
    </html>



    создай index.php
    <!-- index.php -->
    <?php include 'header.php'; ?>
    <main>
        <h2>Содержимое страницы 1</h2>
        <p>Это пример содержимого для первой страницы.</p>
    </main>
    <?php include 'footer.php'; ?>

    Ответ написан
    7 комментариев
  • ALTER TABLE IF NOT EXISTS выдаёт ошибку?

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    Метод
    ADD COLUMN IF NOT EXISTS
    реализован только в MariaDB, но не существует в MySQL 5-8.
    Итак, похоже, у вас есть MariaDB на вашем локальном хосте и MySQL на сервере.

    Для проверки точной версии БД запустите:
    SELECT VERSION();

    В SQLize.online вы можете протестировать свой запрос на разных БД.
    Ответ написан
    2 комментария
  • Почему wc -l выдает на 1 строку меньше?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Потому что считается количество переводов строки, а у вас последняя строка заканчивается концом файла, а не переводом.
    Ответ написан
  • Как указать тип возвращаемого значения абстрактного метода, если он должен возвращать объект класса унаследованного от другой абастракции?

    IvanU7n
    @IvanU7n
    nothing interesting here
    так и указывать Context\State

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

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    //COPY01 EXEC PGM=IEBGENER
    Думаю обзавестися сертификатами по ИБ, подтянуть инглиш и идти на upwork

    Думаю, что на апворке ты нахрен никому не впилился. Тем более, что в РФ апворк давно уже не работает (а если ты не в РФ - то довольно глупо спрашивать здесь).
    Получать его не хочу, слишком долго и слишком мало мне это даст.

    Ага, типичный продукт пятилетней давности. Когда палка и пионер, когда апворк лежа под пальмой... С разморозкой, человече! Мир давно уехал черт-де куда, а ты и не заметил...

    В ИБ, где все строго и регламентировано, в ИБ, где как правило ответственность делегируется (потому что не
    можно управлять системой, будучи внутри ее) - тебе никогда не вырасти никуда с подходом
    нет высшего образования. Получать его не хочу, слишком долго

    Вышка - это такой тест на способность самостоятельного решения задачи. Знания, которые при этом типо получаются - вторичны, хотя некоторые пригождаются. Но в основном вышка - это про умение учиться :) Да-да, вышка учит учиться и не более того. Не одолел - ну вот провалил первый тест на профпригодность. В ИБ, где люди как правило работают на доверии, таких точно не берут (ну разве что в крупных конторах на самые низовые должности)
    Могу написать скрипты для PowerShell и Bash, но с chatGpt

    То есть "освоил Ctrl-C/Ctrl-V, но смысла не понимаю, ибо абизьян
    В целом, могу поднять и настроить любую прогрумму или сервер на Win и Unix.

    По данному заявлению сразу можно сказать, что уровень джуна не преодолен.
    Год не выпускаю из рук ноутбук с KaliLinux,

    Ты ничего не говорил, мы ничего не слышали. Никогда не говори про это в серьезной компании - оборжут и затроллят
    Думаю, что как сисадмин Windows/Linux я почти Middle,

    Ты ошибаешься :)
    Ответ написан
    16 комментариев
  • Какой отечественный linux выбрать для веб-разработки?

    @AlexVWill
    Какой отечественный linux выбрать для веб-разработки?

    Никакой. Для web-разработки абсолютно фиолетово какой у тебя Linux, отечественный или нет. И если нет какой то особой осознанной нужды в использовании именно отечественных изделий, то лучше держаться от них подальше.
    Ответ написан
    3 комментария
  • Что неправильного в моем коде?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Вы получили простое задание, но это не значит, что код нужно написать абы как, лишь бы результат был =). Элементарные вещи стоило бы использовать,как то: автозагрузка классов, шаблонизация.

    0. Код на облачном диске. Почему не гитхаб? Это же удобнее (и плюс в карму=).
    1. Инклуд файлов, вместо автозагрузки классов. Написать автозагрузчик - дело пяти минут. Даже одна минута, если использовать composer.
    2. Разделение мух и котлет. Код отдельно, html-разметка отдельно. Простейший php-шаблонизатор - это тоже пять-десять минут.
    Вот так вообще нельзя писать: echo '<tr><th scope="col">Первый круг</th></tr>';
    3. Разделение обязанностей. У вас один класс и файлы загружает, и читает загруженные, и турнирную таблицу рассчитывает и рендерит ее.
    4. range(0, 19); Почему 20 элементов? Почему не 30? Откуда это число взялось? Его не должно быть в коде.
    5.
    $probablePairsArr[] = range(0, 19);
    $probablePairsArr = $probablePairsArr[0];

    Интересный финт. В чём его сакральный смысл - не ясно. Да и использование локальной переменной здесь не требуется. Можно сразу создавать массив в свойстве класса.

    Наверное всё. Больше там ничего нет.
    Ответ написан
    7 комментариев
  • Что неправильного в моем коде?

    Как минимум, Вы не вникли в задачу. Я вот в футболе практически не разбираюсь - получив такое задание, я пошёл бы в гугл узнавать, как проводятся матчи в турнирах, когда команда играет на своём поле, а когда - нет. Даже по своим скудным знаниям могу кое-что предположить:
    1) Первый круг: команды надо разбить на пары случайным образом. Это shuffle() + array_chunk() . У Вас этого нет.
    1.1) Учесть ситуацию, когда команд - нечётное количество. Этого тоже нет.
    2) в парах какую-то команду назначить хозяином. Соответственно, в выводе в колонке "Хозяева" должно быть не повторение "Хозяева", "Хозяева", "Хозяева", а имена команд
    3) дальше надо смотреть, на каких условиях проводится второй круг, кто в него попадает, на своём поле играют или на чужом..

    Получается, из этого:
    загружать через форму файл json со списком команд, а потом сводить эти команды в турнируную таблицу с условиями (гость, хозяин), круг 1, круг 2 и еще 5-6 условий, которые влияют на список
    Вы выполнили только "загружать через форму файл json", причём зачем-то этот файл сохраняете на диск, а потом немедленно читаете обратно.

    Сергей Вам справедливо указал на "разделение обязанностей", то бишь первую букву в SOLID - Single Responsibility Principle. Даже если оставить на месте выверт с сохранением на диск, получается:
    1. Repository - хранилище данных
    2. метод контроллера, отвечающий за приём данных именно в виде сабмита формы и сохранение их Repository
    3. Генератор текущего круга
    4. View, который отвечает за генерацию html-разметки круга,
    5. метод контроллера, который может извлечь данные из Repository, скормить их генератору, получить результат и скормить его во View.


    И не факт, что методы из 2 и 5 пункта принадлежат одному классу.
    Ответ написан
    Комментировать
  • Как эффективно перейти на c++ при опыте работе с php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Посоветуйте, как можно было бы максимально безболезненно восполнить утраченные знания, а также наверстать упущенные новшества в языке?

    так это...
    Сейчас хочу попробовать реализовать научный проект.
    Собсно практика - лучший учитель, садитесь и пишите. Если базу уже знаете реализация не станет проблемой. По ходу решения текущих задач проекта познакомитесь со всеми нужными изменениями и практиками, сегодня на любой чих есть дока, туториал, видео и чатжпт. Двух зайцев двумя плюсами, так сказать...
    Ответ написан
    Комментировать
  • Как запустить скачанный PhpStorm в Ubuntu командой phpstorm?

    @Giperoglif
    alias phpstorm='{path to phpstorm}/bin/phpstorm.sh'


    чтобы он был постоянным - добавить в .bashrc домашней директории юзера
    Ответ написан
    Комментировать
  • Не запускается Ubuntu 10.10 на intel 14 поколении?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Ставите современную ОС на ваш ПК, далее ставите VirtualBox, а в нём спокойно ставите то, что вам нужно.
    Ответ написан
    Комментировать
  • Не запускается Ubuntu 10.10 на intel 14 поколении?

    @Everything_is_bad
    чуваку уже давно всё объясняли Как установить самый новый совместимый firefox для ubuntu 8.10? можно удалять вопрос
    Ответ написан
    Комментировать
  • Отказоустойчивость web-сервиса - DNS Failover, SQL, PHP. Правильно ли мыслю?

    Sanes
    @Sanes
    2. Два VPS сервера в разных локациях (например Москва и Казань)

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

    @Fedoresko1
    Согласен с коллегами которые недоумевают насчет хранения разницы. Хранить её крайне вредно - это дупликация данных, которая вызывает дополнительные сложности с поддержанием консистентности. Разница легко вычисляется при чтении, именно так и нужно поступить.
    Ответ написан
    7 комментариев
  • Как организовать хранение покупок при продаже услуг с разными характеристиками?

    NikFaraday
    @NikFaraday
    Student full-stack Developer
    Самый простой способ просто вынести общие параметры, такие как [конец действия] в отдельную таблицу [услуг]. А далее все таблицы, что нужно соединить с ней в формате one-to-many

    customizations
     - id:uuid unique
     - image_name:varchar
     - image_extention:varchar
     - site_url:varchar
     - service_fk:uuid unique
    
    coupons
     - id:uuid unique
     - discount:float
     - ticket_count:integer
     - restaurant_fk
     - service_fk:uuid unique
    
    accesses
     - id:uuid unique
     - file_url:varchar
     - service_fk:uuid unique
    
    services:
     - id:uuid unique
     - date_start:timestamp
     - date_end:timestamp


    При выборке делаете просто JOIN и получаете нужные таблицы в связке
    Ответ написан
    3 комментария
  • Возможны ли инклюды в /etc/hosts?

    martin74ua
    @martin74ua Куратор тега Linux
    Linux administrator
    Много лет назад уже изобрели DNS, именно для такой задачи. Кто вам мешает использовать это решение сейчас?
    Ответ написан
    5 комментариев
  • Как сделать редирект в nginx?

    IvanU7n
    @IvanU7n
    nothing interesting here
    try_files
    а именно что-то типа
    try_files $uri /index.php;

    ПЛЮС: и это не совсем редирект, по которым обычно подразумевается посылка ответа с кодами 3XX
    Ответ написан
    Комментировать