Skip to main content

Блог переїхав

Блог переїхав на HUGO . Нова адреса сайту  https://sheremetat.dev

Подходы к разработке приложений с использованием PHP для начинающих

Попытаюсь внести свою лепту в понимание разработки ПО с использованием PHP для начинающих. Это не очередные советы по разработке. Они хорошо описаны в 40 советов по оптимизации вашего PHP-кода и Серия 50+ советов по оптимизации PHP кода .

Я рассмотрю общие подходы по разработке с использованием PHP и, надеюсь, они помогут начинающим разработчикам писать качественное ПО с самого начала их карьеры.
Общие подходы.
В начале все же объязан написать несколько общеизвестных моментов, которые неодноразово упоминались в разного рода статьях.

Старайтесь не начинать изучение языка программирования с статей типа «PHP – быстрый старт» или «Моя первая программа на PHP». Пройдя все пункты (это ведь пошаговые инструкции), вы таки напишите приложение, но поймете ли вы как писать сложные программы? А если и поймете, то поймете ли правильно?

Я начинал с книги Люка Веллинга, Лоры Томсон «Paзpaбoткa приложений c пoмoщью РНР и MySQL». Просто читал и прорабатывал примеры. Но это только вершина айсберга. Не будем забывать о методологии разработки приложений. Тут вам в помощь и Стив Макконелл «Совершенный код», и сайт extreme programming , и agile process , и Getting Real.

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

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

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

Не изобретайте велосипед!

Я сторонник легкой и быстрой разработки. Нет такого PHP программиста, который не попытался бы написать свой «движок» для сайта. Это трудоемкий и сложный процесс. Ведь написан вами код должен использоваться для всех ваших сайтов, а его обновление не должно негативно влиять на их работу. Вы можете использовать для этого разные шаблоны проектирования, и скорее всего начнете с MVC(Model-View-Controller).

И тут вам стоит узнать о Symfony и Zend Framework. Это два наиболее популярние фреймворки для разработки web приожений, построенные на шаблоне проектирования MVC. К вашим услугам и динамическая работа с формами, и удобная ORM(Object-relational mapping), и встроеный шаблонизатор, и много чего еще.

К стати, о шаблонизаторах. Популярный шаблонизатор Smarty легко подключается к Zend Framework, если вас чем то не устраивает стандартный.

Не забывайте о PEAR. Просто посмотрите список пакетов, и вы увидите, сколько всего полезного сделано до вас. Я публиковал в своем блоге статью, где использовал эту библиотеку. По-этому вдаваться в детали не буду.

Если вы все решили писать все «с ноля», возможно вам помогут мои советы:
1.Не перемешывайте HTML теги и PHP код. Разделите на разные файлы и используйте Smarty или другой шаблонизатор.
2.По возможности используйте ООП.
3.Не используйте global. Для передачи переменной в функцию используйте параметры, а для передачи в класс-конструктор (смотрите пример ниже).

Работа с базой данных

Для работы с базами данных, по возможности, нужно использовать ORM или встроенную (в Zend Framework) или подключаемую (doctrine). Это облегчит работу с таблицами, да и код будет выглядеть изящней.

Если нет желания или возможности сделать это, то создайте класс для работы с БД, пусть это будет лишь «обертка» для функций работы с БД. Вы уже сможете работать в данными через один объект, и передавать его (при необходимости) классам.

Простой пример:
class Database {
  protected $connection;

  function __construct($host, $username, $password, $name) {
    $this->connection = $this->connect($host, $username, $password);
    $this->select($name);
  }

  function connect($host, $username, $password) {
    return mysql_connect($host, $username, $password, true);
  }

  function select($name) {
    $test = mysql_select_db($name, $this->connection);
    return $test;

  }

  function query($database_query) {
    return mysql_query($database_query, $this->connection);
  }

  function fetchArray($database_result) {
    return mysql_fetch_array($database_result);
  }

  function fetchAssoc($database_result) {
    return mysql_fetch_assoc($database_result);
  }
}



class MyClass {
  protected $db;

  function __construct($db) {
    $this->db = $db;
  }
}

И еще несколько мыслей.

Если ваше решение вам не нравится — значит оно не правильное (из книги «Совершенный код»). Проводите рефакторинг если вы видите, что код можно упростить или оптимизировать. И так до тех пор, пока не вам не понравится код вашего приложения.
Пишите коментарии и помните о самодокументированом коде. Если переменная называется $countEmployee, то всем понятно что в ней хранится.
Не пишите в блокноте или Far+colorer! Я использую EclipsePDT и вам советую. Очень хорошая подсветка кода и недавно вышла подсветка синтаксиса Smarty. Еще почитайте Список полезных инструментов для php разработчика

Заключение.

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

Спасибо за внимание.