Skip to content

Instantly share code, notes, and snippets.

@korobochkin
Last active August 29, 2015 14:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save korobochkin/71bdc4b54ec7f184abca to your computer and use it in GitHub Desktop.
Save korobochkin/71bdc4b54ec7f184abca to your computer and use it in GitHub Desktop.
Планируем что поделать на втором занятии менторшипа по PHP

PHP Mentorship. Part 2

Планируем что поделать на втором занятии по PHP.

Про WordPress

Насколько правильно и клево написан код WordPress Plugin Boilerplate?

Например, в файле class-plugin-name-loader.php видно, что сначала описываются просто переменные, а в методе __contruct() они заполняются данными.

Также в class-plugin-name.php#L151 версия и название плагина передается в другой класс, где они сохраняются еще раз - мне кажется это не надо делать или могут быть причины для такой конструкции?

Аудит

Пара моих простейших плагинов — bbPress Permalinks with ID и Mark User as Spammer. Качество кода, стилистика, может быть есть грубые ошибки или что-то в этом роде?

Начал делать плагин-адаптацию сервиса Recaptcha от Google и застрял. Кучу классов сделал, пытаясь раскидать по ним функционал, но, похоже, сам и запутался. Вопрос: насколько адекватно я стал раскидывать функционал и как вообще правильно разбить вот такое маленькое «приложение» на базовые составляющие (подробнее см. дальше).

Что должен делать плагин reCAPTCHA Lightweight Adaptation?

Плагин реализует использование сервиса Recaptcha от Google (блок с картинкой, для защиты от спама). Составляющие части плагина:

  1. Страница настроек («схема» того, что из себя представляют настройки в WordPress).
  2. Класс с методами для взаимодействия с API Google.
  3. Класс для вывода формочки капчи в любом месте сайта.
  4. Класс, который по умолчанию прикручивает все выше описанное для формы регистрации в WordPress.

Конструтор

Что значит вот такая конструкция (оригинал)? Какие-то хитрые аргументы передаются.

public function __construct(Workshop $workShop1, Workshop $workShop2) {
  parent::__construct($workShop1, $workShop2);
}

Прочие вопросы

Что такое namespaces? Стоит ли их использовать и как?

Как удалять классы? Просто удалить класс я так понимаю нельзя, но экземпляр класса? unset(), видимо, не то, что надо. А если удалять переменную, в которую «клалось» нечто new ClassName, то мы удаляем лишь указатель.

На сайте Симфонии написано, что Джумла написана на этом фреймворке. Как это понимать? :)

На чем запускать проекты локально? Есть ли какие-то заготовки для Vagrant (эта же тема затрагивается ниже)?

Чем заняться на занятии?

Взять любой фреймворк и сделать на нем простенький сайтик на одну-две страницы. В процессе должны увидеть и столкнуться:

  1. Как красиво и «правильно» начинать репозиторий (я, в принципе, это умею делать, но хочется посмотреть как делать «правильно», может о чем-то не знаю или что-то делаю не правильно, не видел как кто-то другой пользовался репозиториями).
  2. Запустим Vagrant или что-то другое. Наверняка есть готовые образы для разработки на разных фреймворках, чтобы не тратить полнедели на настройку веб-сервера. Например, для WordPress есть VVV с огромным списком предустановленного софта необходимого для разработки под WP.
  3. Не будем скачивать zip-чики, а с помощью Composer сложим мозайку.
  4. Сделаем простую страничку, на которой можно оставить свой адрес эл. почты. И здесь мы столкнемся с некоторыми интересными вещами, которые доставляют много боли, если делать это с помощью «flat php» (без фреймворков и тупо функциями в лоб). 1. Создание форм на страницах. А что если таких одинаковых форм надо 10 штук на странице? А если еще и AJAX прикрутить понадобится (у каждой формы должен быть свой ID или что-то такое)? 2. Прикручиваение CSS-фреймворков к PHP-фрейморкам. Взять, к примеру, Boostrap и добавить к нашей формочке пару классов, чтобы красивее было. 3. Прием данных на сервере и обработка. 4. Вывод пользовательских данных. Фильтрация, XSS. 5. Для упрощения урока результат (адрес эл. почты) можно записывать в файл на диске, если база данных это слишком. 6. Обработка несуществующих страниц (404). 7. Одновременное добавление данных в один файл (БД). Что-то нужно сделать, чтобы наше приложение не падало, если файла нет, если файл открыт и занят другим процессом (записывается адрес от другого посетителя сайта) и т. п.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment