Задать вопрос
  • Для чего в проектах принудительно используют use?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Часть проблем высосана из пальца, как очень смешной п.2 - разница в одну точку с запятой, а уже "гораздо длиннее", карл. При том что если класс использовать в коде хотя бы дважды, то вот тут как раз действительно получится "гораздо длинее"

    use \Framework\Main\UI\Extension;
    Extension::load([ 'vendor.module.components.cabinet.personal' ]);
    Extension::unload([ 'vendor.module.components.cabinet.personal' ]);
    vs
    \Framework\Main\UI\Extension\Extension::load([ 'vendor.module.components.cabinet.personal' ]);
    \Framework\Main\UI\Extension\Extension::unload([ 'vendor.module.components.cabinet.personal' ]);

    и будешь постоянно спотыкаться в коде об эти палочки.

    А часть решается не просто, а очень просто: вместо того, чтобы писать код в Блокноте Виндоус, надо в кои-то веки освоить работу с нормальной IDE. Которая
    - автоматом скрывает блок use
    - по ctrl+наведение курсора показывает полный путь, а по ctrl-click сразу переходит в определение метода
    - подсвечивает неиспользуемые неймспейсы, и не проблема их удалить
    Ответ написан
  • Как сделать что бы возвращало все значения RB php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо прочитать в документации, что делает функция getCell, а потом подумать.
    Кроме просмотра обучающих видео на юбтубе, программирование также требует и собственной мыслительной активности программиста.

    Если думать совсем не получается, то надо пройти по ссылке из ответа на свой предыдущий вопрос, и прочитать там.
    Ответ написан
    5 комментариев
  • Для чего в проектах принудительно используют use?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Минусы как бы очевидны:
    нет, не очевидны, по крайней мере миллионам разрабов

    1 Код становится трудно читаем. По месту использования не всегда понятно что имеется ввиду под Order::load() - \Framework\Sale\Order::load или \Vendor\Project\Sale\Order::load - приходится проматывать к верху файла.
    Вам как разрабу должно быть в принципе фиолетово, какой из пакетов используется, если они соблюдают один интерфейс. Если не соблюдают, при том что называются одинаково, значит все пошло не так задолго до проблем с определением пакета...

    2 Код становиться длиннее - там где было бы просто:
    \Framework\Main\UI\Extension::load([ 'vendor.module.components.cabinet.personal' ]);
    приходится писать:
    use \Framework\Main\UI\Extension;
    Extension::load([ 'vendor.module.components.cabinet.personal' ]);
    Код становится длиннее в проектах где 2 контроллера и в них по 1 экшену. Там где Extension::load будет вызываться больше одного раза, очевидно экономия на эксплуатации клавиатуры заметно увеличивается. А в больших проектах создание объекта может (и будет) повторяться многократно.

    4 Код становиться замусоренным, так как верхушки файлов запросто превращаются во что-то вроде:
    Если не обращать внимание на отсутствие пункта 3, то... нет, не могу не обращать внимание, вот же торопыга....
    Во первых - данная портянка очень аккуратно прячется любой адекватной ИДЕ,
    Во вторых - это правильно и логично, хранить все импорты в одном месте
    В третьих - если ты пишешь неимпортированный класс в коде - ИДЕ обычно предлагает варианты внесения его в блок импорта, и все выглядит аккуратно.

    И хрен его знает используются импортированные классы ниже ещё или уже нет, ведь никто не убирает этот мусор.
    Хрен не знает, а ИДЕ замечательно знает и даже подсвечивает серым цветом неиспользуемые.
    Ответ написан
    4 комментария
  • Как сделать сайт новичку, чтоб он одинаково корректно открывался старыми и новыми браузерами, в том числе смартфонами на Windows mobile 5, Symbian?

    @rPman
    Простых рекомендаций нет.

    Использование фреймворков заранее определит список устройств и браузеров (про устройства - важное замечание, так как банальный размер и наличие скалинга многое определяет), но сделает работу проще, а если делать все самому то будет эффективнее,больше гибкости и главное понимание что как работает и почему нет!

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

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

    Есть два основных направления разработки веб приложений, основные на месте генерации итогового html - на серверной стороне и на клиенте.

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

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

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

    @Zzzz9
    ddrescue
    Ответ написан
    Комментировать
  • Как составить план обучения после основ С#?

    Раз у тебя уже есть готовый список, то вот что можно ответить:

    Самое важное, без чего ты вообще никак не сможешь работать:
    ASP NET Core, Postgresql
    Им нужно уделить больше внимания.
    Курсы есть и по тому и по другому, есть и вполне хорошие бесплатные.
    Например у Postgrespro есть бесплатный курс (тебя должен интересовать PostgreSQL для разработчика) и книги.

    Затем то, что точно пригодится в работе, но что сравнительно быстро можно изучить:

    git - ты его не упомянул, но он очень важен. Есть бесплатная книга Pro Git где подробно описаны все его команды + есть немало видео на youtube где в действии показано, как им пользоваться.

    SOLID - можно почитать статьи и книгу "Чистая Архитектура". В любом случае от тебя не ждут знаний на уровне архитектора тут.

    Unit tests - просто попробуй сам писать тесты на каком-нибудь фреймворке. Например на xUnit.
    Ещё можешь почитать книжку Кента Бэка про разработку через тестирование.

    Code review - просто почитай пару статей о том, зачем это нужно, и как не быть мудаком-ревьюером, и как принимать обратную связь на ревью.

    Методологии разработки - просто ознакомься с теми, какие вообще есть.
    Большинство сейчас работают по Scrum или Kanban (либо на чём-то производном от них).
    Можешь ещё agile manifesto почитать
    Опять же - от тебя тут не ждут знаний уровня менеджера проектов, и тебе не придётся с нуля процесс разработки в команде выстраивать.
    Ответ написан
    1 комментарий
  • Preg_replace_callback, как записать найденные значения в массив?

    @dodo512
    $text = 'Просто текст 12345';
    $matches = [];
    $text = preg_replace_callback('~[0-9]~', function($match) use(&$matches) {
    $matches[] = $match[0];
    return '';
    }, $text);
    
    var_dump($text, $matches);
    Ответ написан
    1 комментарий
  • Стоит ли покупать ультрабук для учёбы в ВУЗе (программирование)?

    yakovlev_13
    @yakovlev_13
    Шаманство, экзорцизм и некромантия.
    Если потребности нет, то не стоит слушать посторонних людей. И тут тоже))
    Купите когда действительно понадобится.
    А так на казённых хоть к линуксу привыкните))
    Ответ написан
    Комментировать
  • Могло ли дойти напряжение до материнской платы и спалить всё к чертям?

    hint000
    @hint000
    у админа три руки
    Если делать ставки, как в тотализаторе, то 80% за то, что в БП сгорел варистор (цена детальки 10-50 рублей, в зависимости от жадности продавцов). Сценарий такой: варистор в БП закоротил вход БП, после чего уже сгорел удлиннитель.
    15% за дополнительные повреждения в БП, в первую очередь конденсаторы.
    Оставшиеся 5% за повреждения материнской платы и прочего. Даже с дорогим БП нельзя полностью исключить такую возможность.
    Погорели блочки ко всем роутерам и модемам
    Вот там, держу пари, конденсаторы взорвались с вытеканием электролита.

    От таких случаев защищает реле напряжения, которое можно установить в щиток.
    Ответ написан
    2 комментария
  • Как грамотно реализовать пагинацию через класс?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Еще раз: Тут нет никакого ооп, у вас получается какой-то процедурный код, засунутый внутрь класса. Это к ооп не имеет никакого отношения. Не пытайтесь сделать деревянную печку, ничего хорошего не получится.
    У вас:
    Код реализует (такой себе) пэйджинг для одного конкретного запроса (нахрена такой пейджинг засовывать в класс?)
    Код ничего не инкапсулирует, тупо выполняется как функция. По сути если мы уберем class Paginate extends Connection{ то ничего не поменяется.
    Внутри методов используются глобальные переменные (GET), что само по себе уже лютый говнокод.
    Много слов про солид и прочие вещи из ооп не пишу, в виду полного их отсутствия в коде, да и смысл?

    По этому решения для вашего случая в контексте ооп просто нет, так как:
    Пэйджинг работает с моделями на основе ОРМ, в пэйджинг в качестве аргумента передается модель, и далее уже пэйджинг работает с моделью, используя ее методы работы с хранилищем, а не просто тупо фигачит запросы. У вас моделей просто нет.
    Модели подразумевают конкретный интерфейс, который позволяет работать с пэйджингом адекватно. Ну и моделей нет ))
    Точкой взаимодействия между моделью и пэйджингом будет контроллер, про который тут вообще у вас никто не в курсе.
    Вывод (view) никогда не пересекается с кодом логики, в него просто передаются готовые данные, после чего они вставляются в нужные точки шаблона.
    Ответ написан
    6 комментариев
  • Как вывести второе поле если первое пустое?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    или покороче,
    'name' => $result['short_name'] ?: $result['name'],
    Ответ написан
    1 комментарий
  • Как вывести второе поле если первое пустое?

    Eridani
    @Eridani
    Мимо проходил
    'name' => ($result['short_name'] ? $result['short_name'] : $result['name']),
    Ответ написан
    1 комментарий
  • Как просмотреть нужные файлы в папке?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Использовать функции для работы с файловой системой. glob, например.
    И ты не стесняйся - рассказывай что уже пытался сделать, что получилось, где застрял. Код показывай, там, ага

    Дополнительная информация из комментариев:
    Для неопределенного количества вложений используют рекурсию - пишешь функцию, которая возвращает список файлов в каталоге и его подкаталогах в нужном тебе формате, которая вызывает сама себя для каждого найденного каталога или стилистической ссылки и добавляет результат к списку файлов.
    Пример рекурсии: https://qna.habr.com/q/1189114#answer_2211560

    Также, есть способ через итератор: https://www.php.net/manual/en/class.filesystemiter...
    Ответ написан
    4 комментария
  • Как мне быть, если HP Support Assistant больше не работает в России?

    @ewgenc
    Снести его нафиг и забыть, меньше мусора в системе будет.
    Ответ написан
    Комментировать
  • Какая архитектура приложения лучше?

    @exmach
    Frontend Developer
    Монолит (предположу, что вы описываете inertia js) лучше-удобнее для работы fullstack-разработчика в одиночку, если отдельные люди на фронте и бэке, то монолитная структура проекта превращает их работу в ад (по личному опыту говорю).

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

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

    Для решения задачи необходимо использовать внешние средства передачи данных. Поскольку весь каскад триггеров работает в одном соединении, проще всего использовать определённые пользователем переменные с предопределёнными именами, которые инициализируются на старте триггера и сбрасываются на его финише:

    CREATE TRIGGER trigger_name
    EVENT ACTION ON table_name
    FOR EACH ROW
    BEGIN
        SET @trigger_name_table_name = CONCAT('executed, ', 'column_value=', NEW.column);
    -- trigger action
        SET @trigger_name_table_name = NULL;
    END;

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

    GavriKos
    @GavriKos
    WakeOnLan +нечто мониорящее ваш сайт на предмет нажатости кнопки
    Ответ написан
    Комментировать
  • Как сдедать скрипт, который будет обратно кодировать код?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Никак.
    Лицензия получается XOR'ом ключа с вычисляемой (на самом деле, фиксированной) гаммой.
    Зная только часть лицензии можно получить только соответствующую часть ключа.
    Если знать все части лицензии, то достаточно записать их через '|', проXORить с вычисленной гамой и закодировать в BASE64.
    Ответ написан
    4 комментария
  • Как правильно отправить в базу данных сразу несколько ссылок на картинки?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    То есть весь вопрос сводится к "при записи я кодирую данные c помощью json_encode, а при выводе не раскодирую, но виноваты создатели этого сайта".

    Но главные проблемы этого кода конечно не в json.
    Во-первых, этот код позволяет заливать РНР файлы, и первый же малолетний придурок этим воспользуется.
    Во-вторых, этот код пропускает SQL инъекцию, и первый же малолетний придурок этим воспользуется.
    Остальное уже мелочи.

    Но если отвечать на вопрос в целом, то да - вставлять все ссылки в одно поле это действительно неправильно.
    Плюс, в БД всегда должны храниться только сырые данные, а любое форматирование добавляться только при выводе. То есть сохранять надо только сами имена файлов.

    Но в данном случае вообще непонятно, зачем сохранять ссылки в БД.
    При заливке берётся id созданного пользователя, создаётся папка с таким именем, и в неё заливаются файлы.
    При выводе файлы читаются из этой папки и выводятся.
    Ответ написан
  • Есть ли риск спалить системник при использовании блока питания с 450 ватт?

    При повышении нагрузки либо будет аварийное выключение из-за просадки напряжения, либо будет перегрев БП.
    При перегреве БП будет либо аварийное выключение БП, вместе со всем компьютером, либо произойдёт повреждение компонентов БП.
    При этом может произойти возгорание БП, а потом и всего компьютера, если разгорится хорошо.
    Также может произойти какой-нибудь интересный электрический эффект, из-за чего может произойти КЗ или ещё что неприятное, из-за чего даже без возгорания твои дорогие комплектующие, в лучшем случае, придётся ремонтировать.

    В целом, даже если 450вт фактически хватает - он будет на предельных значениях работь, а тут и КПД ниже, и нагрев больше.
    + со временем (с годами) общая мощность БП может падать.

    Так что лучше в ближайшее время купить более мощный БП.
    Ответ написан
    Комментировать