• В чем отличие type и interface. В каких случаях что использовать?

    feligz
    @feligz
    JS/TS developer
    Есть 2 главных различия между Type alias и Interface ( для версии TS 4.1.3).

    1. Нельзя использовать implements, если присутствует оператор union.
    type Box = Shape | Figure
    class MyBox implements Box {} - ошибка...

    2. Нельзя использовать одно имя для нескольких типов. Другими словами, нельзя расширить тип, а вот интерфейс можно ( и это может быть удобно, если нужно расширить интерфейс сторонней библиотеки).
    type Box = {}
    type Box= {x: number} - ошибка...
    Ответ написан
    Комментировать
  • Для чего нужны замыкания (js)?

    Замыкание это функция и внешние переменные, которые в нее приходят.
    Переменная не приходит - замыкания нет.
    Ответ написан
    Комментировать
  • Как запомнить классы, функции и методы в программировании и сэкономить время?

    Зачем их запоминать, скажите пожалуйста?
    Определили задачу -> Написали запрос в поисковик -> Нашли подходящее решение.
    То, что часто используется запомнится само, редко используемое запоминать и не нужно.
    Ответ написан
    2 комментария
  • Как сделать такое на js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Считать сумму всех значений, увеличивать радиус пропорционально:
    Ответ написан
    Комментировать
  • Верен ли такой подход к изучению программирования?

    Denormalization
    @Denormalization
    В современном мире 80% задач решается копипастом чужого кода и небольшой правкой. (Британские учены доказали).
    Для типовых задач уже давно существуют готовые решения. Не нужно изобретать велосипеды, а тем более комплексовать из-за этого.

    Вам же стоит не просто копировать чужой код и разбираться в нем, но и попробовать его воспроизвести.
    Т.е как-то так:
    - Копипастим
    - Разбираемся почему и как оно работает
    - Удаляем все, создаем новый проект и пишем все с нуля без подсказок (ручками).

    Такой подход будет более эффективен.

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

    @McBernar
    Практически любой сайт можно назвать CRUD-приложением.
    CREATE, UPDATE, DELETE — например, комментарии пользователей, или наполнение сайта информацией контент-менеджером через админку. READ, соответственно, самая базовая операция по получению информации из БД. Открыли главную страницу — вот и READ.
    Ответ написан
    Комментировать
  • Что такое CRUD-приложение, и для чего он нужен?

    oxyberg
    @oxyberg
    Продуктовый дизайнер ВКонтакте
    via wiki:
    CRUD (сокр. от англ. create, read, update, delete — «создать, прочесть, обновить, удалить») — акроним, обозначающий четыре базовые функции, используемые при работе с персистентными хранилищами данных[1]:
    • создание;
    • чтение;
    • редактирование;
    • удаление.


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

    PavelMonro
    @PavelMonro
    Сделайте проще.
    Стартуйте апач от своего имени.
    В консоли:
    sudo nano /etc/apache2/envvars
    Поменяйте переменные:
    export APACHE_RUN_USER=login
    export APACHE_RUN_GROUP=login


    А то я однажды с этими правами и прочим, группами, замучался)

    Ну а по поводу группы то так добавить:
    sudo adduser {your-user} www-data
    И дать права рекурсивно:
    sudo chmod 775 -R /path/to/project
    Ответ написан
    8 комментариев
  • Laravel как исправить file_put_contents ( chmod 775 не помогает)?

    @KingstonKMS
    Проблема не только в правах, но и в том, кто ими владеет. Например, если с файлами вы работаете под www-data, а сервер апач или какой то иной, под apache, то их нужно поместить в одну группу, чтобы групповые права на запись были к нужным объектам.
    Ответ написан
    2 комментария
  • В чем разница между Redux и Reflux?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    В общем:
    - redux популярнее (больше работы)
    - redux должен быть стабильнее (так как слишком широкое внимание к себе привлекает)

    Технически: обе библиотеки берут свое начало от реализации flux, но имеют разницу в деталях. Судя по документации reflux - у них тоже (как и flux) несколько store-хранилищ. У redux - store един.

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

    Лучшее объяснение Redux что я видел.
    getinstance.info/articles/react/learning-react-redux
    ba494148d28e422b4c7bd269de5bed09.png
    Ответ написан
    Комментировать
  • Как правильно использовать ServiceProvider в laravel?

    be_a_dancer
    @be_a_dancer
    Backend/Fullstack Developer
    Вообще, желательно прочитать про паттерны, когда вы их применяете. Постараюсь коротко объяснить, хотя тут, конечно, нужно брать соответствующую литературу и документацию и изучать тему.

    TL;DR

    Сервис-провайдер - класс, который загружается первым во всем вашем приложении и позволяет настроить все. Дословно все. Маршруты, мидлвари и так далее. К примеру, те два файла роутинга, которые ты используешь в своем приложении загружаются в классе RouteServiceProvider.

    Чуть подробнее. Сервис провайдеры являются ларавелевской имплементацией шаблона Dependency Injection. Они позволяют на этапе сборки приложения задать зависимости для дальнейшего их использования. Кроме того, сервис-провайдеры, непосредственно, собирают приложение. Любая библиотека для Laravel, которую вы найдете в интернете, начинается именно с сервис провайдера, который определяет политику загрузки всего модуля.
    Ответ написан
    Комментировать
  • PSR-0 или PSR-4, и как правильно построить структуру проекта?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    /path/to/project/ это путь к проекту и данный путь нигде не фигурирует, это та директория из которой запускается основной index.php

    Нет. Этот корневая директория проекта. Из нее запускается композер. В ней же обычно лежит DOCUMENT_ROOT каталог, в котором уже и находится точка входа index.php. Также здесь лежат директории vendor (для сторонних пакетов) какой нибудь application/ для ваших файлов.

    Давайте попробую объяснить на примере.

    Пусть будет такая структура, например.

    60926735302a7422195552.png

    в vendor - вам ничего самому писать не нужно. Этот папка для композера.
    public_html - в ней только index.php и все ваши css, images, js. Это папка на которую указывает DOCUMENT__ROOT в настройках домена вашего сервера. Только эти файлы доступны "по интернету".
    application - здесь все ваши самописные php файлы.
    (На остальные каталоги не обращаем внимания, в корне проекта можно располагать все что вам удобно, это не будет доступно из web)

    Под такую структуру написан подобный composer.sjon
    {
      "require": {
        "php": ">=5.5.9",
        "slim/slim": "2.*",
        "twig/twig": "~1.18",
        "slim/views": "^0.1.3",
        "robmorgan/phinx": "^0.4.4",
        "illuminate/database": "^5.1"
      },
      "minimum-stability": "stable",
      "autoload": {
        "psr-4": {
          "MyName\\MyProject\\": "application"
        }
      }
    }

    Тут вроде бы все просто. В require перечислены используемые пакеты. Поясню только autoload. Автозагрузка по стандарту PSR-4. Указано пространство имен ваших файлов и папка в которой они лежат.
    Если ваш класс MyClass лежит в папке application - то у него должно быть пространство имен \MyName\MyProject (полное имя класса получается \MyName\MyProject\MyClass). Если ваш класс MyController лежит в папке application/Mvc/Controllers, то, соответственно \MyName\MyProject\Mvc\Controllers\MyController.

    При этом вам не нужно заморачиваться и писать автозагрузчик. Просто выполните команду php composer.phar install (или php composer.phar dumpautoload для пересборки аавтозагрузчика) и подключите файл автозагрузчика в index.php
    include '../vendor/autoload.php';

    Не использовать композер не имеет смысла, т.к. это очень просто. Просто скачайте файл https://getcomposer.org/composer.phar в корень проекта и пользуйтесь (см выше).
    Ответ написан
    5 комментариев
  • Что должен знать middle PHP разработчик?

    @D_Mitrich
    ...работаю по принципу "если надо - разберусь"...иметь представление - да, досконально исследовать каждый пункт - зачем?
    Ответ написан
    Комментировать
  • Что должен знать middle PHP разработчик?

    bboytiwst
    @bboytiwst
    Очень интересную вакансию получил на днях, на мой взгляд она в какой то мере описывает то, что должен знать мидл.
    - писать хороший код на PHP от 2 лет;
    - знаешь для чего нужны интерфейсы в PHP
    - у тебя есть опыт проектирования MySQL, понимание механизма оптимизации реляционных баз данных этого типа;
    - используешь концепции ООП, а не пишешь лапшекод;
    - знаешь основные паттерны проектирования
    - умеешь разбираться в чужом коде;
    - знаешь о замыкании в JavaScript и как красиво написать рабочий код;
    - применял AJAX и периодически его используешь;
    - знаешь как писать юнит-тесты и когда их писать целесообразно;
    - знаешь о dependecy injection и почему он нужен для повторного использования, масштабирования и тестируемости;
    - понимаешь, чем ActiveRecord со связями отличается от традиционного, фаулеровского, ActiveRecord


    IMHO то что надо
    1. знать большинство отличий/нововведений 2-3 последних мажорных версия PHP (и уметь их правильно использовтаь)
    2. знать один из фреймворков (ZF2, Symfony2, Laravel4/5) на уровне полного понимания внутренней работы фреймворка (на каких паттернах построена та или иная часть системы, почему именно на них, как это все взаимодействует и т.д)
    3. знать как работают реляционные СУБД т.е понимание JOIN'ов не только, что куда лепить, а и как это происходит внутри, ну и с остальными функциями так же
    4. ну и в конце то концов разобраться с SPL, что бы не было ситуаций как на PHP UK Conf.
    5. JS - понимать как там все внутри крутиться, вертится. Желательно знать еще какой то фреймворк (Angular, backbone, etc)
    6. HTML, CSS - по вкусу (не считаю, что php программист должен быть крутым верстальщиком, но одно другому не мешает и если нравится то это только плюс будет)
    7. Знать English, что бы стыдно на митинге не было
    8. быть адекватным, вменяемым человеком
    Ответ написан
    6 комментариев
  • Чем куки отличаются от сессии в PHP?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Нууу давайте разбираться.

    Для начала почитайте про HTTP на той же вики. Досканально знать не нужно, но стоит минимально понимать структуру запросов/ответов, понимать что у запроса и ответа есть заголовки и тело (тела может и не быть, зависит от типа запроса/ответа).

    Так вот. Куки. Куки живут на стороне браузера. Они передаются HTTP заголовком на каждый запрос на сервер (даже если вы за картинками полезли). Есть просто куки, есть http-only куки. Куки могут быть разграничены по хосту и пути. Все это дает нам гибкость и помогает с секьюрностью. В PHP содержимое $_COOKIE предоставляет нам SAPI. Когда PHP получает на обработку запрос, SAPI используемое (php-fpm, cgi, mod_php имеют свои реализации SAPI) в данный момент берет заголовки и тело запроса, парсит их и заполняет все эти суперглобальные массивы типа $_SERVER, $_GET и в том числе и $_COOKIE. Все что прислал нам клиент (что-то что делает запросы это клиент, что-то что их обрабатывает - сервер), а куки шлет нам браузер только те что можно исходя из того куда шлется запрос. Устанавливаются куки заголовком Set-Cookie в ответе, то есть тут больше нужно читать в принципе про HTTP а не про PHP. PHP просто позволяет вам работать с этим добром. Вы можете сэтить куки напрямую работая с заголовками ответа при помощи функции header. Более того, если выставить время жизни куки в 0, то как раз таки они а не сессия будет сбрасываться при закрытии браузера так как тот будет забывать все такие куки.

    Вот... сессии... В PHP сессия обычно это файл. Просто какой-то файл с рандомным именем. Если скажем в php.ini указано session.autostart или делается вызов session_start то создается файл под сессию пользователя (можно переместить в рэдис или мемкэш, свое хранилище и т.д в зависимости от нужд. Так же данные можно шифровать, что по умолчанию и происходит). Этот файл имеет ID, просто какая-то рандомная строка. И если при обработке запроса не нашлась сессия с предыдущего запроса - создается новая.

    И вот мы подошли к самому интересному - как PHP связывает сессию с предыдущего запроса с текущей. И тут все довольно просто - куки. Когда пользователю присваивается сессия, автоматически сэтится http-only (что бы нехорошие люди не могли из js увести нашу сессию) кука, в которую записан идентификатор сессии. В дебагере браузера можете посмотреть есть ли у вас кука PHPSESSID (название можно менять в настройках, да и вообще сессии можно не только через куки связывать, но это уже загоны по секьюрности) когда будете эксперементировать с сессиями.

    Когда запрос обрабатывается SAPI, при наличии session.autostart, перед тем как начинать создавать новую сессию, пых все же смотрит а есть ли у нас кука с идентификатором сессии, проверяет есть ли у него такая, и если есть успокаивается и не создает новую. Поскольку сессия привязывается через куки, то можно выставить время жизни этой самой куки (в php.ini) и таким образом регулировать время жизни сессии.

    Вот... когда использовать куки а когда сессии? Желательно понимать, что чем больше данных в куках (а у них есть лимит к слову) - тем больше данных мы передаем на каждый запрос. То есть это не круто когда что бы получить 1 килобайт данных мы должны в заголовках передать пару килобайт кук. Люди, повернутые на оптимизации, даже картинки хранят на отдельных cookie-less доменах что бы уменьшить количество трафика и пакетов (обычно простенький HTTP запрос влазит в размеры одного TCP пакета). Если вам нужно работать с этими данными из JS на любой странице, например локаль выбранноую пользователем для того что бы применять переводы еще и в JS, то стоит использовать куки. Для всео остального лучше конечно же использовать сессии. Во всяком случае на начальных этапах когда что-то сильно сложное вам делать не придется.
    Ответ написан
    2 комментария
  • Как подходить к решению нетривиальных задач?

    Привет.

    Всегда использую модель боли:

    1) Смотришь задачу
    2) Пытаешься её решить
    3) Понимаешь, что ты тупой идиот, который ничего не может.
    4) Поднимаешь в помощь гугл
    5) Поднимаешь в помощь литературу
    6) Спрашиваешь ребят на тему: "почему так, а не иначе".
    7) Выполняешь задание, осознавая, что ты тупой, раз на решение этой задачи тебе пришлось потратить столько времени.

    Повторить до бесконечности, и ты станешь профи.
    Ответ написан
    7 комментариев
  • Защита админ-панели на сайте php?

    V1RR
    @V1RR
    Love to code
    Если взять простой вариант решения этого - тебе нужно написать запрос, где проверяешь статус пользователя.

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

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

    $r = mysqli_query($mysqli, "
      SELECT * FROM `users` 
      WHERE `email` = '$email' 
      AND `password` = '$password'
    ");
    $f = mysqli_fetch_array($r);
    
    if($f['status'] == '4') { // Если в поле status для текущего юзера у нас значение 4
      echo 'Разрешаем доступ, выполняем дальнешие действия по авторизации';
    } else {
      echo 'Пользователю с вашим статусом доступ запрещен';
    }
    Ответ написан
    7 комментариев
  • Удалять ли данные из бд?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Удалять записи можно только если они гарантированно не понадобятся в будущем и на них не ссылаются другие записи.
    Ну и если таблица большая и содержит много индексов, то быстрее пометить запись на удаление, а реальное удаление и, соответственно, перестроение индексов делать при периодическом обслуживании.
    Ответ написан
    Комментировать