• Какой PHP фреймворк посоветуете для быстрой разработки проекта?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    - Представление о MVC имею. Раньше писал пару проектов на CodeIgniter, но на нём на мой взгляд мало что есть из коробки, и много времени уходит на разработку.
    С тех пор изобрели Composer, при должном желании прикручивается он и к CI в том числе :)

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

    - Хотелось бы большое количество подключаемого функционала из коробки, для экономии времени разработки. Например уже написанная логика авторизации, регистрации, восстановления пароля и разграничения по уровням доступа. Понимаю что всё равно придется немного допиливать под свои нужды, но времени это сэкономило бы кучу.
    Composer - решает 99% проблем, практически в любом фреймворке.

    - Возможность работы с различными БД из коробки
    Пока фреймворков без этой штуки не видел, но есть... Вы не поверите, Composer, что бы сменить/поставить "другой" ORM, если Вам "текущий" чем-то не подошел.

    - Поддержка кэширования из коробки. И желательно что бы была поддержка некешируемых областей при генерации страницы, а сам кэш был управляемым.
    То о чем Вы говорите, это: Varnish, Nginx+SSI и т.д. кэширование "из коробки" есть в Symfony (т.к. если его отключить, страницы может генерироваться феерически долго)

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

    - Проект будет ориентировочно крутиться на nginx+php5-fpm. Думаю практически все фреймворки смогут работать в этой среде, но вдруг...
    Я пока таких "вдруг" не встречал. Если у админа голова и руки на месте - то никаких "вдруг" быть не должно. А вообще, у PHP версии 5.х, есть как минимум 3 основных "ветки", это <5.3, >=5.3 или 5.4+ и т.д., ещё кое-какие отличия были в 5.5 и 5.6, но не такие "разительные", подробности можно почитать в истории версий PHP. По этому, нужно конкретнее указывать версию, например, Laravel требует 5.6+

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

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

    1. Yii2
    2. CMS + готовые модули CMS
    3. Вы не забыли, что есть... composer?!

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

    Большое спасибо за время уделенное прочтению моего вопроса, и огромное спасибо за Ваши ответы.
    Не за что! Кнопка "Мне нравиться" - сразу под сообщением :D
    Ответ написан
    4 комментария
  • Вопрос про ООП, как использовать?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Вот, например, надо сделать простейшую фотогалерею.
    На вашем примере, что бы было понятно на пальцах, заранее прошу прощения у присутствующих за примитивизм. В данном случае у вас будет коллекция объектов, которая тоже объект, это как массивы, если примитизировать понятия до упора, одни могут быть вложены в другие. Делаете допустим так:
    $image= new Image(); //создаем пустой объект имаж, чтобы иметь его настройки(таблица, поля...)
    $gallery = new Collection ($image); //создаем новую коллекцию объектов типа имаж, пока пустую.
    $gallery->getCollectionByField(array("galleryid"=>"64")); // инициализируем из базы, используя
    // ид галереи, теперь в гэлери одной строчкой мы загрузили все картинки в свойство (например),
    // $gallery->collection  и можем к ним обращаться как к элементам массива, и в свойстве
    // $gallery->collection[1] будет объект типа $image. Как вариант реализации.

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

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

    ps:
    ваш код - почему бы не писать так:
    $post=BLOG::getPost($айди_поста);
    // меняем 
    $post = new Post($айди_поста);
    
    echo $post['content'];
    // меняем 
    echo $post->content; // не обязательно так, может вот так:
    echo $post->getContent(); // тогда при выводе можно будет сделать какую-то предварительную обработку, 
    //заменить тэги, еще что-то...
    
    $comments=BLOG::getComments($айди_поста);
    // меняем
    $comments = new Comments($post);
    echo $comments->getTree(); // хотя тут скорее всего от вьюшки зависит, я бы тут возвращал не 
    // строку, а массив для итератора, это правильнее для разделения на мвц, мухи отдельно - 
    // котлеты отдельно, в смысле код и хтмл.
    Ответ написан
    Комментировать
  • Конфигурация ПК. Для кодинга и игр одновременно. Возможно ли?

    @sarathorn
    php программист, веб-дизайнер, коллекционер
    1) Нет смысла брать процессор без индекса К и материнку на Z170 чипсете. Или немного доплатите и купите i5 с индексом K, или просто берите самую дешёвую материнку на H110 или B150 чипсете.
    2) ССД на 128Гб - хватит за глаза, если на нём размешать Windows 10 + Office + Фотошоп + другой софт, не более. Если хочется виртуалку запустить с ссд, то логичнее было бы взять ссд на 240+Гб.
    3) Жёсткий диск уже вам самим решать какого объёма. Веб разработка не требует больших объёмов, следовательно, диск остаётся под игрушки, торренты и прочее.

    Процессор и видеокарта. Тут всё зависит от бюджета и требований. Если играть в FullHD, то хватит карточки уровня GTX1060 или RX480. Может быть не в каждой игре получится выкрутить всё на максимум, но оно не очень и надо. Павел посоветовал взять i7, я с ним не очень согласен. Совет, без сомнений, правильный, если вам нужна процессорная мощность. Но 90% игр хватит и i5 вообще за глаза. Особенно в паре с 1070. Игры больше требовательны к видеокарте. Я не вижу смысла переплачивать.

    Мониторы.
    У меня три 24" 1920х1080. Для работы очень удобно. Для игр... вполне. В CS:GO это даёт сильное преимущество. В ведьмаке усиливается погружение в игру. И пока всё. В других играх я не оценил эффекта.
    До этого я жил на 27" 1920х1080 + 19" 1366х768. Не удобно из-за разной плотности пикселей, из-за разного разрешения. Мой вам совет - берите одинаковые мониторы. Если очень хочется 21:9, тогда лучше сейчас взять 3х16:9, а потом докупить ещё один стол и 21:9 моник. Гы.
    FPS просаживается, но в рамках разумного. Например, моя старушка Radeon 7950 в Ведьмак 3 на одном мониторе на высоких выдаёт ~32фпс, а с тремя мониторами такая же цифра получается только на средних.

    Ещё могу посоветовать подождать месяц и дождаться выхода новых процессоров от АМД. Нам обещают производительность i5 по цене i3, а ещё с разблокированным разгоном и кучей других плюшек. Если амд действительно сделает всё отлично, то и интел будет вынужден снижать цены, а амд изначально не будет слишком дорогим.

    UPD:
    Не знаю на практике как работает на нвидии возможность играть на трёх мониторах. В теории нужны 3 абсолютно одинаковых монитора, что вы вроде как и планируете.
    Карточки от АМД позволяют использовать вообще разные мониторы. Если вам ВДРУГ захочется запустить игру на связке из 27" 4К + 19" 1366х768 + 19" 1280х1024 - амд позволит, а нвидия нет.
    Ответ написан
    2 комментария
  • Как настроить bitbucket под резервное хранилище?

    POS_troi
    @POS_troi
    СадоМазо Админ, флудер, троль.
    git add .
    git commit -m "backup 10.01.17"
    git push
    Ответ написан
    Комментировать
  • Как сделать удаленный домашний ПК?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    В этом мире, E=MC2, и нет ничего за пределами этого.
    Не может появиться какое-то волшебное и вредное излучение, без энергии.
    И 5 и 3.5 вт на материнке никак не могут излучать больше, чем антенны wifi, которыми вы похоже хотите себя просто обернуть несколько раз.

    Шум на 90% убирается правильным (крупным) корпусом и правильными широколопастными вентиляторами в этом корпусе.

    Я бы порекомендовал не париться с излучениями совсем, а шум можно убрать, соорудив для корпуса отдельный ящик из звукопоглощающих материалов, но ОБЯЗАТЕЛЬНО продумать систему вентиляции, чтобы недопустить перегрева
    Ответ написан
    Комментировать
  • Согласны ли вы с утверждением, что bootstrap подходит только для прототипов?

    @Volde
    Умея верстать, bootstrap ни к чему. Чаще всего удобнее верстать самому это факт
    Потому что верстается то, что будет использоваться, не переопределяя стили фреймворка
    Бустрап отличный инструмент, если у вас нет времени на то чтобы верстать все с нуля, или вы делаете шаблонные решения
    Ответ написан
    3 комментария
  • Как лучше подключать блоки кода в Yii2?

    usdglander
    @usdglander
    Yipee-ki-yay
    Я обычно в виджеты выношу. Хотя можно и так и так... :)
    Ответ написан
    Комментировать
  • Как обналичить белые деньги с сим-карты МТС, если заблокирована возможность отправки смс на любые номера?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    ну так потому и невозможно
    Ответ написан
    Комментировать
  • Не стоит ли настораживаться от подобных оплат?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    для людей с суперсилой странный вопрос
    Ответ написан
    Комментировать
  • Говорить ли на собеседовании, что ты проходил курсы, которые были платные, но ты их скачал с торента и прошёл всё бесплатно?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    В портфолио нужно указывать работы, а не курсы.
    Всем плевать что ты качал с торрента. Человек, который собирается тебе листать, будет проверять насколько хорошо ты их усвоил на примере твоих работ, а в случае их отстуствия - тестового задания. Так что я бы вообще на этот счёт не парился.
    Ответ написан
    2 комментария
  • Где предел шаблонизации и автоматизации?

    sim3x
    @sim3x
    emmet - хватает и без шаблонов, и копипасты
    Ответ написан
    Комментировать
  • Дает ли строгая типизация в PHP 7 прирост производительности?

    Начал писать ответ комментарий https://toster.ru/answer?answer_id=937197, но ответ получился большим и поэтому решил поместить его отдельно.

    DevMan , я попробую уточнить ваше утверждение, что немного снижает.
    На самом деле, при использовании скалярных тайпхинтов снижается производительность вызова функций, поскольку возникает некий дополнительный оверхед на валидацию аргументов и приведение значений к нужным типам (если не используется strict_types). Но! Так как внутри функции значения аргументов уже приведены к нужным типам, то при использовании аргументов не происходит неявного приведения типа.
    Поясню на синтетическом примере:
    function foo($x) {
        $result = 0;
        for ($i = 0; $i < 100; $i++) {
            $result += $i + $x;
        }
        return $result;
    }


    Если вызвать эту функцию так: "foo('123')", то в таком случае внутри цикла аргумент будет неявно приводится к целому числу 100 раз. Если вызвать функцию так: "foo(123)", то в таком случае аргумент не будет внутри цикла приводится к целому числу. Очевидно, что второй вариант более производительный:
    ~$ time php70 -r 'function foo($x) { $result = 0; for ($i = 0; $i < 10000000; $i++) { $result += $i + $x; } } foo("123");'
    
    real    0m0.860s
    user    0m0.855s
    sys     0m0.005s

    ~$ time php70 -r 'function foo($x) { $result = 0; for ($i = 0; $i < 10000000; $i++) { $result += $i + $x; } } foo(123);'
    
    real    0m0.508s
    user    0m0.500s
    sys     0m0.008s


    В то же самое время, если добавить к аргументу скалярный тайпхинт, то тогда значение аргумента один раз будет приведено к тайпхинту и внутри функции уйдёт весь оверхед связанный с неявным приведением типа:
    ~$ time php70 -r 'function foo(int $x) { $result = 0; for ($i = 0; $i < 10000000; $i++) { $result += $i + $x; } } foo("123");'
    
    real    0m0.502s
    user    0m0.498s
    sys     0m0.003s

    ~$ time php70 -r 'function foo(int $x) { $result = 0; for ($i = 0; $i < 10000000; $i++) { $result += $i + $x; } } foo(123);'
    
    real    0m0.504s
    user    0m0.495s
    sys     0m0.008s


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

    Зато использование строгой типизации не даст запустить функцию в неконтроллируемом состоянии: когда функция ожидает на вход целое число, а по какой-то причине подсунули массив:
    $var = $_GET['foo'];
    bar($var);
    , для get-параметра foo=123 вызов будет корректным, а для foo[]=123 вызов функции приведёт к TypeError; для foo=abc тоже будет TypeError. Разумеется, этот пример сильно надуман и тут нужно использовать "нормальный" валидатор.
    Ответ написан
    1 комментарий
  • Cssnext VS Scss/sasss/stylus. Стоит ли переходить?

    sim3x
    @sim3x
    Запросов на верстку в
    постцсс/sass - 1
    sass - 100+
    Ответ написан
    Комментировать
  • Cssnext VS Scss/sasss/stylus. Стоит ли переходить?

    zooks
    @zooks
    Frontend
    Имхо лучше оставаться на Sass/Scss + autoprefixer.
    Ничего революционного в PostCSS пока нет.
    Ответ написан
    Комментировать
  • Yii2 как сделать redirect на referrer с анкором?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый вечер.
    <?php
    // создает якорный URL: /index.php?r=post/view&id=100#content
    echo Url::to(['post/view', 'id' => 100, '#' => 'content']);
    ?>

    Подробней здесь
    Ответ написан
    1 комментарий
  • Не понимаю, что такое модульная сетка?

    @Mercury13
    Программист на «си с крестами» и не только
    Первое определение говорит о вёрстке вообще. И даже второе слишком общее. Более-менее правильное такое.

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

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

    На ватмане эти направляющие рисовали, потом стирали. На компьютере — они находятся где-то на непечатаемом слое и блоки к ним прилипают.

    Всегда следовать модульной сетке? Нет, конечно. Дизайнов разных куча. Где он академичнее, там модули; где закос под что-то неформальное — стараются модули делать там, где пишущий краской на стене действительно сделал бы две вещи одинакового размера. А иногда выровнять одно с другим — это натянуто.

    Я бы дал такие правила.
    1. Не впихивай невпихуемое. Если не получается выровнять по художественным или техническим причинам — зачем это прокрустово ложе?
    2. Не мельчи модуль. Если не видно, что размеры кратны — пропадает смысл.
    3. Модуль не обязательно один. Высота картинки и высота строки могут быть некратны, например, если нет обтекания картинок текстом.
    Ответ написан
    3 комментария
  • Как изолировать сайты на VPS?

    orlov0562
    @orlov0562
    I'm cool!
    Запускай веб-сервер от разных юзеров (например, для апач с помощью модуля mpm_itk) и настрой open_base_dir исключительно на директории сайтов.
    Ответ написан
    1 комментарий
  • Оптимизация PNG (практически) без потерь для web, что использовать?

    AMar4enko
    @AMar4enko
    https://github.com/imagemin/imagemin
    Конкретно по PNG:
    https://en.wikipedia.org/wiki/Pngcrush, плагин imagemin-pngcrush, loseless
    https://en.wikipedia.org/wiki/Pngcrush, плагин imagemin-pngquant, lossy, качество настраивается, само собой
    Ответ написан
    Комментировать
  • Как обезопасить себя от кидалова устраиваясь джуниором на удаленку?

    opium
    @opium
    Просто люблю качественно работать
    мне кажется джуниор должен думать о другом, да и больше чем на месяц вас не обманут
    Ответ написан
    1 комментарий
  • Как подружить два jquery на одной странице?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Правильным решением было бы подключить одну версию jQuery и jQuery Migrate Plugin и исправить проблемы о которых он говорит.

    Если хотите костылей, можете
    или слить в один файл jquery И плагин обернуть их функцией, которую сразу выполнить и проверить внутри неё не объявляется глобальных переменных, вполне вероятно это может заработать
    Или другой вариант попроще: пройдите автозаменой по jQuery и плагину, замените там jQuery на myQuery, И подключите то что получилось, ну и соответственно не забывайте про $.noConflict();
    Ответ написан
    Комментировать