• Ваше отношение к рекурсии?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Рекурсия - это отличное решение для отдельных задач. Такое же, как использование case вместо if, или использование sql вместо массивов данных.

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

    Чтоже касается того, что "в каких-то языках это плохо работает", так пока не попробуете - не узнаете.
    Ответ написан
    Комментировать
  • Ваше отношение к рекурсии?

    @protven
    У меня отношение к рекурсии точно такое же как к рекурсии.
    Ответ написан
    5 комментариев
  • Ваше отношение к рекурсии?

    GavriKos
    @GavriKos
    Ваше отношение к морозильнику? Где то примерно лет 5 назад сложилось сомнительное мнение, однако сейчас все чаще покупаю пельмени и их надо где то хранить.

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

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    • Делать символьные классы из одного символа совершенно излишне. С другой стороны, тогда вам придётся экранировать специальные символы (скобки, плюс). Такая запись (с экранированием) более привычна тем, кто знаком с регулярками, но может быть сложнее для новичков. Однако, я всё же рекомендую привыкать к обратным слэшам - скоро вы перестанете их замечать.
    • Символьный класс [0-9] можно заменить на сокращение \d. На мой взгляд, так выглядит чище.
    • Если уж ставите ограничение на конец строки ($), то и начало (^) стоит поставить.
    • Учитывая, что у вас в строке вообще нет букв, ни к чему добавлять модификатор i

    Результат:
    /^\+380\(\d{2}\)\d{3}-\d{2}-\d{2}$/
    Ответ написан
    Комментировать
  • Связь многие ко многим в MS SQL для чего?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Простейший пример - сотрудники и группы. Сотрудник может входить в несколько групп, в группу может входить несколько сотрудников.
    Ответ написан
    Комментировать
  • Связь многие ко многим в MS SQL для чего?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега SQL
    Седой и строгий
    Пример из реальной жизни: Есть таблица товаров интернет-магазина и есть таблица акций, действующих на товары. Любой товар может участвовать в множестве акций и любая акция может включать множество товаров. И нет никакого способа хранить информацию об этих связях, кроме использования дополнительной таблицы.
    Ответ написан
    Комментировать
  • Как отменить игнорирование файла gitignore?

    Добавить этот файл в исключения .gitignore. Вам же, наверняка, нужно не один раз его добавить, а изменения отслеживать.
    *.foo
    !bar.foo
    Ответ написан
    1 комментарий
  • Правильно ли реализован класc?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Пишу свою модель MVC


    а код привели контроллера. Да и в целом вы уже на этом этапе проигрываете. Не нужно даже пытаться разбираться с MVC, это конкретная реализация принципа разделения ответственности. Сначала стоит разобраться с принципом, лежащим в основе, а уже потом ковыряться с реализацией.

    и мне кажется что я делаю что-то не так и хочется его добить


    Давайте сначала по мелочам:

    if ( !defined( 'FILE_COMPILE' ) )

    убрать. Если вы собираетесь "конкатенировать PHP" - не делайте этого. Есть opcache.

    if ( !class_exists ( 'Controller' ) ) {

    composer и PSR-4 совместимая автозагрузка классов.

    class Controller extends UDAPI {

    Наследование классов (extends) - плохо (ну опять же в подавляющем большинстве случаев). Наследование типов (implements) - хорошо. Приучайте себя использовать наследование классов как крайнюю меру.

    Ну и опять же, что это за UDAPI от которого вы наследуете контроллер? Не выгоднее ли передать его в конструктор контроллера как зависимость?

    protected $uri;
        protected $params = array();
        protected $request = array();


    сделайте отдельный класс Request и инкапсулируйте работу с ним там.

    $this->uri = filter_input ( INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL );
        $this->uri = trim ( $this->uri, '/\\' );
        $this->uri = urldecode ( $this->uri );
        $this->uri = parse_url ( $this->uri, PHP_URL_PATH );


    Опять же, это не задача контроллера. Контроллер пусть принимает уже готовый объект запроса.

    if ( $this->uri == '' )
            $this->redirect ( $this->config->root_uri . $this->default[ 'controller' ] . '/' . $this->default[ 'action' ], true );


    Почитайте про мидлвэры, про фронт-контроллеры, про Model-View-Adapter. Последняя схема куда лучше вписывается в модель HTTP сервера.

    public function ready ( ) {

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

    $this->setController ( array_shift ( $this->pattern ) );
    $this->setAction ( array_shift ( $this->pattern ) );


    Пара слов о состояние. Состояние это сложность. То есть посмотрев на переменную `$this->pattern` мы понятия не имеем что там хранится поскольку с течением времени его значение меняют. Причем зачем меняют - непонятно.

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

    call_user_func_array ( array ( $controller, $this->action ), $this->request );


    На дворе PHP7 между прочим.

    } else {
                echo '404 error';
              }


    раз уж начали - делайте всю обработку ошибок через исключения. Тут вам пригодится как раз фронт контроллеры и прочее.

    public function isController ( $controller ) {
        if ( is_dir ( SOURCE_DIR . '/controllers/' . $controller . '/' ) ) {


    ... PSR-4, классы... автозагрузка...

    public function getModel ( $controller ) {

    Для 2006-ого года в целом нормально, но это ж 10 лет назад.
    Ответ написан
    2 комментария
  • Как записть в БД смайлик?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Колонка `input` должна иметь чарсет utf8mb4 - четырёхбайтовый utf-8.
    Ответ написан
    2 комментария
  • Как выбирать направление архитектуры ООП приложения?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    и как отдельный класс-синглтон


    Зачем? Зачем сингелтон? Ответте на вопрос когда это нужно?

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


    - Разделение ответственности - важный принцип инженерного дела в принципе.
    - Принципы SOLID - хорошо дают понять как работать с зависимостями и делать декомпозицию системы. Сильно пересекается с инкапсуляцией, полиморфизмом и разделением ответственности.
    - Паттерны GRASP - эдакая смесь принципов и паттернов, описывают нюансы цикла жизни объектов и их взаимодействия друг с другом.
    - Закон Деметры - про инкапсуляцию.
    - CQRS - подход по разделению операций записи и операций чтения. Естественно подход такой не работает если вам надо реализовать атомарную запись и чтение, но это минимальный набор задач.
    - Рефакторинг. Он нужен всегда. Его нужно делать по чуть-чуть когда видно что "уже мешает" или "можно было сделать лучше". Ну то есть это не переписывание всего и вся большими кусками, а маленькие изменения которые с течением времени эволюционно меняют архитектуру проекта. Возможно только если код покрыт тестами, это отдельная жирная тема.

    Не нужно знать "архитектуры", они являются лишь результатом соблюдение принципов. И уж тем более "паттерны" это лишь элементы архитектуры. Не нужно на них зацикливаться, это лишь словарь.

    https://en.wikipedia.org/wiki/Category:Programming...
    Ответ написан
    2 комментария
  • Как реализовать проверку на то через http или https у человека открыт сайт?

    @bkosun
    Переменная $_SERVER['HTTPS'] принимает непустое значение, если запрос был произведен через протокол HTTPS.

    Замечание: Обратите внимание, что при использовании ISAPI с IIS значение будет off, если запрос не был произведен через протокол HTTPS.

    www.php.net/reserved.variables.server

    Следовательно:
    if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') { 
    // HTTPS
    }
    Ответ написан
    Комментировать
  • Динамческий DOM без HTML и CSS?

    T_y_l_e_r
    @T_y_l_e_r
    вначале интерпретатор будет выполнять js а потом еще html
    логики не вижу
    ежу понятно что так не быстрее будет
    Ответ написан
    Комментировать
  • Динамческий DOM без HTML и CSS?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Конечно медленнее.

    1. HTML уже на странице
    загрузка HTML -> парсинг HTML -> рендеринг страницы

    2. Только JS
    Загрузка JS -> парсинг JS -> выполнение JS -> вставка кода DOM -> парсинг HTML -> рендеринг страницы

    Вывод очевиден.
    Ответ написан
    Комментировать
  • Swift 3 & IOS 10 обучение какие ресурсы лучше?

    ThePyzhov
    @ThePyzhov
    iOS Ninja
    Учите свифт. В идеале знать надо оба, но начинать лучше со свифта
    И лучше всего стэнфордский курс
    Официальный учебник от эпла + курс. Больше ничего не надо)
    Ответ написан
    Комментировать
  • Как в ларавель собирать ресурсы для страниц?

    Sanasol
    @Sanasol Куратор тега Laravel
    нельзя просто так взять и загуглить ошибку
    смысл сборки собрать всё в один файл. В большинстве случаев по крайней мере.
    Чтобы не терроризировать сервер запросами, а так же чтобы не было никаких мельканий при загрузке доп. стилей.
    И в целом время загрузки сокращается за счет уменьшения количества http запросов.

    Модули-то вам никто не мешает делать разные в разных файлах, но собирать в один полезно и нужно. Если там конечно не на 10 мегабайт JS скриптов.
    Тогда надо отдельно собирать уже по "необходимости" и функциональности: https://laravel.com/docs/5.3/elixir#working-with-s...

    elixir(function(mix) {
        mix.scripts(['app.js', 'controllers.js'], 'public/js/app.js')
           .scripts(['forum.js', 'threads.js'], 'public/js/forum.js');
    });
    Ответ написан
    3 комментария
  • Как многомерный массив превратить в одномерный?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    array_column()

    $input = array(
      array(
        "id" => "1338",
      ),
      array(
        "id" => "3727",
      ),
      array(
        "id" => "3849",
      )
    );
    
    var_dump(array_map('intval', array_column($input, 'id')));
    Ответ написан
    Комментировать
  • Почему php вырезает закрывающие теги из xml?

    nazarpc
    @nazarpc
    Open Source enthusiast
    PHP не вырезает подобные тэги, ему всё рано что печатать, выполните указанный код сами и увидите.
    Это у вас где-то в другом месте проблема.
    Ответ написан
    Комментировать
  • PHP удалит загруженные файлы, если к ним не применить move_uploaded_files?

    PavelK
    @PavelK
    Удалятся сами после завершения работы скрипта.
    php.net/manual/en/features.file-upload.post-method.php
    "The file will be deleted from the temporary directory at the end of the request if it has not been moved away or renamed."
    Ответ написан
    Комментировать
  • Этично ли при работе над проектом избавляться от посредников?

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

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Реально ли вообще с нуля самому не смотря не документацию или чужой код создать Движок?


    Нет. Хватит лениться.
    Ответ написан
    Комментировать