Задать вопрос
  • Перенос Bitrix от хостинга локально, как сделать?

    babarun
    @babarun
    Безумный план моих идей в руках больных людей
    Перенос продукта «1C-Битрикс»
    Перенос сайтов в многосайтовой конфигурации

    Не много не ясны эти моменты
    если сомневаетесь, то лучше найдите специалиста.
    Ответ написан
    Комментировать
  • Зачем (в наше время) везде писать phpdoc комменты?

    Kozack
    @Kozack
    Thinking about a11y
    • Не всегда то, что сейчас кажется самодокументированным кодом будет восприниматься так же спустя время.
    • Каким бы ни был хороший код, простое предложение с описанием для каких целей нужно это свойство, проще для восприятия, чем искать его по всему классу.
    • Это нужно для генерации документации. В которой будут не только названия свойств и методов, но и их описания. На русском, если нужно.
    • Если в проект приходит новичок, ему проще вникнуть имея документацию.
    • Некоторые IDE могут показывать подсказки с комментариями и доп инфой из phpdoc


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

    Но, это всё справедливо в случаях, когда комментарии представляют собой чуть больше чем
    /**
     * @var int
     */
    private int $precision;
    Ответ написан
    2 комментария
  • Что такое end-to-end тестирование?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Понятие еnd-to-end обозначает всего-навсего классификацию тестов по уровню, на котором тестируется система, и, само по себе, ничего не говорит ни о том, какие конкретно должны быть эти тесты, ни о том, какую роль они играют в общей стратегии обеспечения/проверки качества и, также, не является методикой тестирования. (Методика - это совсем другое понятие.)

    Для понимания сути этого понятия хорошо сравнить его с модульным ("нижний" уровень) и интеграционным ("средний") тестированием на каком-нибудь конкретном примере. Давайте рассмотрим некий сферический webshop в вакууме. Предположим, в нем есть 50 классов и для большинства из них написаны модульные тесты. Они проверяют исключительно функционал конкретного модуля (чаще всего, класса), т.е. тот, что зависит только от самого модуля и ни от чего чего более. Потом есть интеграционные тесты. Они проверяют корректность работы отдельных "модулей", если их собрать вместе согласно архитектурe. Например, работает ли правильно "Корзина", состоящая, в свою очередь, из 10 классов (предварительно проверенных модульными тестами), или "Корзина", подключенная к "Вебморде" и т.д. Где-то повыше в этой иерархии есть такие интеграционные тесты, которые проверяют конкретный функционал всей системы. Например, отправляется ли юзеру мейлом копия оплаченного заказа...

    И вот тут начинается самое интересное для понимания того, что такое end-to-end тестирование! Можно представить себе тест, проверяющий, что соответствующий мейл генерируется и сбрасывается SMTP серверу. Если SMTP сервер не рассматривать, как часть разрабатываемой системы, то этот тест вполне можно назвать end-to-end тестом (послали кучку HTTP запросов через "Вебморду" и проверили сброс мыла на SMTP - все зашибись!). Однако, если настройки и эксплуатация SMTP сервера - часть проекта (например, заказана разработка webshop "под ключ"), может оказаться, что это мыло будет отфильтровано каким-нибудь спам-фильтром, превысит лимит почтового ящика пользователя... короче, не дойдет до него. Тогда этот же самый тест уже нельзя считать end-to-end, а нужно бы было написать тест, проверяющий приход мыла в POP3/IMAP ящик. (Опять же, если это действительно нужно! Ибо, в зависимости от конкретных функциональных и нефункциональных требований, архитектор и QA инженер вполне могут найти возможность обеспечить адекватный контроль качества и без такого теста.)

    Таким образом, end-to-end тесты, это такие интеграционные тесты, которые воздействуют на систему через ее самые внешние интерфейсы и проверяют ожидаемую реакцию системы через эти же интерфейсы. Почему именно интеграционные? Потому, что это единственное, что можно о них сказать наверняка: они по определению не могут быть модульными тестами. А все остальное: являются ли они одновременно приемочными, нагрузочными или еще какими - зависит только от общих плана/стратегии тестирования и той роли, которые эти тесты в них играют.
    Ответ написан
    Комментировать
  • Как отключить xdebug при работе с консолью?

    DevMan
    @DevMan
    не включать его для консоли вообще.
    или настроить чтоб дебаг-сессия не стартовала автоматом.
    Ответ написан
    Комментировать
  • Зачем используют Django и Python, разве не удобнее сразу все сделать через Node.js и javascript фреймворки?

    Hivemaster
    @Hivemaster
    Админ, который хочет программировать
    JavaScript - очень плохой язык, который выжил только благодаря его безальтернативности на фронте, а Node.js была создана только для того, чтобы открыть доступ в мир взрослого программирования несчастным засранцам, вкатившимся через фронт. Причём сам создатель Node.js считает её ошибкой. Лучше уж тогда развернуть ситуацию и писать фронтовый код на чём-нибудь вроде Brython. Только остаётся ещё html и css, а использовать настоящего программиста для вёрстки - это глупый расход ресурсов, проще нанять верстальщика/фронта.
    Ответ написан
    2 комментария
  • ООП: Правильно ли архитектурно так делать?

    Vamp
    @Vamp
    Возможно, это нормально, так и должно быть ? или как архитектурно правильно решать подобное?

    Это нормально. Безликие массивы становятся осмысленными сущностями. Такой код становится проще понимать и поддерживать.

    Используемый вами подход называется data transfer object (DTO). Широко распространенная практика. DTO отлично сочетается с иммутабельностью, которая присутствует в ваших классах.

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

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

    Называется ORM. Находится в ответственности ORM слоя/фреймворка.
    Ответ написан
    4 комментария
  • Зачем используют Django и Python, разве не удобнее сразу все сделать через Node.js и javascript фреймворки?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Бекенд - это не язык. Это понимание соответствующих технологий работы с базами данных, кешированием, работы со структурами данных, протоколами, технологиями, алгоритмами, построением архитектуры и связыванием с внешними сервисами и прочее...
    А поскольку это охватывает очень большой пласт проблем - и произошла специализация.

    А Python разработчики имеют дело в основном только с бэкенд - и понятия про фронтенд у них будут на уровне dummy html, css, bootstrap.

    Угу... При таком подходе - с чего вы взяли тогда что у фронта будут достаточные знания о работе бекенда? Раз по-вашему бекендер только в dummy html может, - а фронтендер сразу с ходу сможет оптимизированные запросы к БД к примеру писать? )))) Если ваш фронтендер настолько крут - то в принципе незнание языка не помеха, поскольку язык - только инструмент.
    Ответ написан
    3 комментария
  • Почему декодирование JSON возвращает null?

    Не правильный json, множественные корневые элементы.

    [
       {
          "login":"igor",
          "password":"qwerty"
       },
       {
          "login":"igor",
          "password":"qwerty"
       },
       {
          "login":"igor",
          "password":"qwerty"
       }
    ]
    Ответ написан
    1 комментарий
  • Как с помощью javascript отправить комментарий в instagram?

    @hokid
    Сюдя по всему инстаграм написан на React. Вы изменяете параметры напрямую в DOM, что не отражается на стейте компонента React, который отрисовывает форму комментария и кнопку, потому и нет никакого эффекта, грубо говоря, изменяя напрямую DOM вы не добьетесь желанного. Попробуйте диспатчить события ввода на форме комментария.
    Ответ написан
    Комментировать
  • Какое направление выбрать, если не хочешь до конца жизни пилить формочки и гонять json?

    alexgp13
    @alexgp13
    Руководитель ИТ-проектов
    За свою жизнь мне довелось поработать в веб-разработке, автоматизации газопроводов, бухгалтерии, автоматизации бизнеса и даже дизайнером рекламы и журналистом. И останавливаться пробуя новое пока не собираюсь) При этом образование у меня - радиотехника.

    Образование не ограничивает круг возможных профессий, а жизнь иногда складывается так, что приходится заниматься совершенно неожиданными вещами. Выбирайте ту специальность, которая ближе Вам в данный момент, интернет здесь вряд ли подскажет оптимальный выбор, тем более что у каждого здесь свой собственный путь и своя правда - кто-то оканчивает ВУЗ и всю жизнь работает по специальности, а кто-то ищет себя в самых неожиданных областях.
    Ответ написан
    1 комментарий
  • Как правильнее использовать getters?

    Fzero0
    @Fzero0
    Вечный студент
    Геттеры используются в тех случаях, когда нужно вывести модифицированную информацию из хранилища
    Ответ написан
    Комментировать
  • Почему не работает код в задаче гостевая книга на php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    По порядку:
    Браузер выдает следующую ошибку:
    Во первых не браузер, а сервер, а браузер ее только отображает. Во вторых это уведомление и предупреждение, а не ошибка.
    Далее, если ваш $view->assign('persons', $data); работает верно - значит в индексе ДО этого места в дата ничего нет. Что легко проверить с помощью вар_дамп. И если там не пусто - что-то в вашем вью работает криво, или не так как вы предполагаете, читайте документацию к данному методу.
    Ответ написан
    4 комментария
  • Как сделать микроразметку на сайте?

    1) Пройти курсы битрикса и сделать самому
    2) Нанять исполнителя за денежку
    Ответ написан
    Комментировать
  • В чем практический смысл использования интерфейсов в PHP?

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

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

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

    В-третьих, продуманный интерфейс позволяет в большей степени создавать взаимозаменяемые реализации — конечные классы. Тот, кто использует интерфейс при разработке класса обязан разработать все обязательства интерфейса.

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

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

    Добавлю, к слову, о внедрении зависимостей. Действительно, этот подход может использоваться и без интерфейсов, тот факт, что инверсия управления и внедрение зависимостей используются чаще всего с интерфейсами — своего рода совпадение. Хороший пример: фреймворк Yii 2 или библиотека Pimple, там в качестве маркеров для внедрения зависимостей часто используются произвольные (или основанные на иных соглашениях) строки. Это к тому, что DI — необязательно самый яркий пример использования интерфейсов (хотя и более ценный, чем другие варианты).
    Ответ написан
    Комментировать
  • Как установить PHP 5.4 CentOS 7?

    SagePtr
    @SagePtr
    Еда - это святое
    Через докер, например, запускать её в контейнере, пробрасывать туда нужные папки со скриптами.
    В итоге даже если сломают это старьё через уязвимость - дальше проброшенных папок не пролезут.
    Ответ написан
    Комментировать
  • Как в 1 файл php из js передать несколько массивов с помощью AJAX?

    @alekcena
    Нелинейный наставник
    Сделать обёртку?
    let a = { 
    mas1:[1,2,4,5,6,],
    mas2:['asd','as2']
    }
    Ответ написан
    4 комментария
  • Почему такая запись выдаёт фатальную ошибку?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    Потому что $count это не ограничение на количество замен, а туда записывается сколько раз сработала замена.

    Потому туда надо передавать переменную, а не цифру.

    sandbox.onlinephpfunctions.com/code/87f0105ff5614c...

    str_replace(
        array|string $search,
        array|string $replace,
        string|array $subject,
        int &$count = null
    ): string|array

    https://www.php.net/manual/ru/function.str-replace.php
    Ответ написан
    Комментировать
  • Как получить ошибки с php, если работаешь не через браузер?

    @Barmunk
    try {
       tlgrm('sendMessage', ['text' => 'Само сообщение']);
    } catch (Throwable $t) {
        tlgrm('sendMessage', ['text' => $t->getMessage()]);
    }
    
    try {
        // Code that may throw an Exception or Error.
    } catch (Throwable $t) {
        // Executed only in PHP 7, will not match in PHP 5.x
    } catch (Exception $e) {
        // Executed only in PHP 5.x, will not be reached in PHP 7
    }


    https://habr.com/ru/post/261451/
    Ответ написан
    Комментировать