Пишем чистый код на PHP

Чем хороший код отличается от плохого? Хороший код читается легко, а плохой — плохо. На этом можно было и закончить статью, но давайте разберемся в том, какой код хороший и почему.
Хороший и чистый код — это, прежде всего, код очевидный для других программистов. Что способствует увеличению очевидности кода?
- Описательные имена переменных. Согласитесь, трудно читать код, в котором более сотни переменных, имена которых $a, $bc, $f32 и так далее.
- Лаконичные функции и методы классов. Если код функции / метода состоит из большого количества строк, то его становится сложнее воспринимать.
- Отсутствие дублирования кода. Грамотно распределенная по классам и функциям логика способствует пониманию того, что делает и за что отвечает код.
- Отсутствие мертвого и неиспользуемого кода. Чем меньше ненужного кода написано — тем лучше.
Говорят, что начинающие программисты не следят за чистотой кода, потому что только осваивают и без того сложный материал; что программисты среднего уровня не следят за чистотой кода, потому что за ним следит их ментор (более опытный программист, Team Lead или др); и, наконец, продвинутые программисты не следят за чистотой своего кода потому, что и так все понятно, они же продвинутые 🙂
Тем не менее, чистый код приятнее, легче и дешевле поддерживать.
Как писать сайты на PHP — искусство само по себе, а делать это красиво и чисто — его вершина.
Поэтому, на каком бы уровне вы не находились, старайтесь придерживаться следующих советов чистого кода PHP.
Используйте описательные имена
Имена должны передавать намерения программиста. Чтобы выбрать хорошее имя, потребуется потратить немного времени, но это время окупиться уже при следующем прочтении фрагмента кода. Имя переменной должна отвечать на следующие вопросы:
- Почему эта сущность (переменная / функция / класс) существует?
- За что она отвечает?
- Как она используется?
Например, есть переменная $d, инициализированная целым значением:
$d = 14;
За что отвечает данная переменная? Как нужно интерпретировать значение этой переменной? Программист, который впервые увидит этот фрагмент кода, потратит время для того чтобы разобраться в этих вопросах.
Имя $d не передает ровно никакой информации, поэтому это имя следует заменить более подробным, например:
$elapsedTimeInDays = 14;
Содержательные имена существенно упрощают понимание и модификацию кода PHP. Пример кода, на этот раз с использованием функции:
function data($key, $default = null);
О каких данных (data) идет речь и что происходит с этими данными — запись или чтение? Допустим, мы хотим считывать данные из временного хранилища (cache). Тогда имя функции должно стать таким:
function get_cache_value($key, $default = null);
Теперь имя функции отвечает на все главные вопросы.
Предпочитайте вертикальное масштабирование кода горизонтальному
Простыми словами: следует ограничить максимальное количество символов в строке. Это позволит скроллить код только в одном направлении. Как этого достичь?
- Не записывайте более одного выражения в строке. Например:
// Погано: Ініціалізація двох змінних у рядку $numberOfDays = 4; $dayOfWeek = 2; // Добре: Кожна php змінна ініціалізується на своєму рядку $numberOfDays = 4; $dayOfWeek = 2;
- При использовании конструкций if, for, do, while, foreach всегда используйте фигурные скобки, а тело конструкция записывайте в отдельных строках:
// Погано: Тіло умови на одному рядку з самою умовою if (is_auth()) update_user_history(); if (is_premium_user()) load_premium_content(); // Добре: Використовуються фігурні дужки та тіло умови відокремлені від умови if (is_auth()) < update_user_history(); >if (is_premium_user())
- Если используется длинное строковое значение, то его следует разделить с помощью оператора конкатенации “.”:
// Погано: Довгий рядок сприяє додатковому горизонтальному прокручування echo “Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.”; // Добре: Рядок поділено на рядки приблизно однакової довжини echo "Lorem ipsum dolor sit amet, consectetur adipisicing " . "elit, sed do eiusmod tempor incididunt ut labore " . "et dolore magna aliqua. Ut enim ad minim veniam, " . "quis nostrud exercitation ullamco laboris nisi " . "ut aliquip ex ea commodo consequat.";
Упрощайте сложные языковые конструкции
Логика приложений имеет тенденцию к усложнению, и это напрямую сказывается на качестве кода.
Это может приводить к тому, что условные конструкции, которые отвечают за логику приложения, становятся сложны для понимания. Например, есть группа вложенных условных операторов, среди которых сложно выделить нормальный ход выполнения кода:
function getPayAmount() < if (isHold()) < $result = getHoldedAmount(); >else < if (isSeparated()) < $result = getSeparatedAmount(); >else < if (isRetired()) < $result = getRetiredAmount(); >else < $result = getNormalPayAmount(); >> > return $result; >
Это пример так называемого «адского условного оператора»: отступы каждого из уровней вложенности способствуют горизонтальному форматированию кода, и код становиться похожим на луковицу.
Для того, чтобы превратить этот адский оператор в райский, необходимо выделить граничные условия и использовать ранний выход из функции.
function getPayAmount() < if (isHold()) < return getHoldedAmount(); >if (isSeparated()) < return getSeparatedAmount(); >if (isRetired()) < return getRetiredAmount(); >return getNormalPayAmount(); >
Это далеко не все приемы, которые можно использовать для того, чтобы сделать код чище и качественнее, однако программист любого уровня может использовать их в своей работе.
Рекомендуем публикацию по теме

- Пишем чистые функции на PHP читать 10 мин
Как написать PHP скрипт
В создании этой статьи участвовала наша опытная команда редакторов и исследователей, которые проверили ее на точность и полноту.
Команда контент-менеджеров wikiHow тщательно следит за работой редакторов, чтобы гарантировать соответствие каждой статьи нашим высоким стандартам качества.
Количество просмотров этой статьи: 36 705.
В этой статье:
PHP — это серверный язык написания скриптов, предназначенный для создания интерактивных веб-страниц. Он стал очень популярен благодаря простоте использования, функциям интерактивности внутри веб-страниц и интеграции с HTML. Только представьте себе, что происходит в момент редактирования страницы даже на этом сайте. За этим процессом стоит множество, а возможно, даже сотни PHP скриптов, контролирующих изменение веб-страниц в зависимости от различных обстоятельств. В данной статье вы узнаете о том, как можно написать несколько очень простых PHP скриптов — так вы получите общее представление об основах работы PHP.
Часть 1 из 3:
Первые шаги с оператором Echo
![]()
- Для запуска «Блокнота» на любой версии Windows можно использовать сочетание клавиш ⊞ Win + R > Notepad.
- Запустить TextEdit на Mac OS можно через меню «Программы» > TextEdit.
![]()
- Введенный код должен выглядеть примерно так: .
![]()
- В «Блокноте», добавьте расширение .php к названию файла и заключите в кавычки. Таким образом, «Блокнот» уже не будет считать файл текстовым и не станет преобразовывать его в текстовый формат. Если не добавить кавычки, то имя файла автоматически станет следующим: hello world.php.txt. В качестве альтернативного варианта отключения автоматического добавления расширения .txt при сохранении в меню «Тип файла» можно выбрать значение “Все файлы (*.*)». В этом случае имя файла останется таким, каким вы его введете, и вам уже не нужно будет добавлять кавычки.
- В программе TextEdit не нужно добавлять кавычки в название файла при его сохранении. Вместо этого появится всплывающее окно с запросом на подтверждение того, что вы хотите сохранить файл с расширением .php.
- Убедитесь в том, что сохраняете файл в корневом каталоге документов вашего сервера. Обычно внутри папки сервера Apache на Windows этот каталог называется “htdocs”. Для Mac каталог по умолчанию расположен в /Library/Webserver/Documents, однако путь может быть скорректирован при настройке сервера.
![]()
- Если возникнет сообщение об ошибке, проверьте, что код в файле введен в точности как в примере. Убедитесь в том, что не забыли добавить точку с запятой в конце команды.
- Также необходимо проверить, что файл сохранен в правильном каталоге.
Хочу научиться программировать на PHP. С чего начать?
Подборка курсов, книг, основных аспектов языка для изучения PHP. Также рассказываем, с чего начать и как можно обучиться играючи.
Рассказываем, что делать, если вы хотите изучить PHP с нуля: с чего начать путь программиста, как продолжить и успешно пройти первое собеседование.
Зачем учить PHP?
Среди главных преимуществ языка:
- простота и низкий порог вхождения;
- эффективность для решения задач веб-разработки;
- множество удобных фреймворков;
- востребованность навыков: на рынке есть много вакансий как для Junior PHP-разработчиков, так и для опытных Senior’ов;
- возможность использования в изолированной среде;
- большое количество материалов для изучения языка, активное сообщество.
С другой стороны, язык часто критикуют за несогласованный синтаксис функций, отсутствие обратной совместимости между версиями, многопоточности и поддержки многобайтовых кодировок в ядре.
Что учить?
- основы языка: синтаксис, типы данных, переменные, функции, константы, массивы, объекты, выражения;
- основы HTML, CSS и веб-дизайна;
- реляционные БД;
- Linux, HTTP, Nginx, Apache;
- FTP, Git и другие инструменты;
- шаблоны проектирования;
- Object-relational mapping (ORM);
- Model-View-Controller (MVC);
- фреймворки и микрофреймворки;
- тестирование;
- средства виртуализации: Vagrant, Docker.
Где писать код?
IDE
Попробуйте каждую среду разработки и поймёте, с какой платформой вам комфортнее всего работать:
Редакторы кода для PHP-проектов
Где учить?
Учебники
PHP: The Right Way
PHP. Сборник рецептов
Изучаем PHP 7. Руководство по созданию интерактивных веб-сайтов
Ещё книги по PHP — в нашей подборке.
Онлайн-курсы
- Хекслет;
- Geekbrains и Mail.ru;
- FructCode;
- PHP UP.
Всё выучил, что дальше?
- Проходите тесты на знание PHP.
- Попробуйте найти заказчика на небольшой простой сайт. Если не найдёте — сделайте «для себя». Экспериментируйте с кодом, добавляйте эффекты, спрашивайте советы на профильных форумах. Купите домен и арендуйте хостинг, опубликуйте сайт. Расскажите о нём на тех же форумах и попросите оценить.
- Следите за вакансиями PHP-программистов на Хантиме, hh.ru, у нас на Tproger и других ресурсах. Решайте тестовые задачи, ходите на собеседования.
- Найдите наставника. Идеально, если вы будете учиться под руководством опытного программиста с хорошими коммуникативными навыками. Им может быть ваш первый работодатель, знакомый с форума, преподаватель курса PHP. Взамен предлагайте небольшую скидку на свои услуги. Так вы быстрее освоитесь в профессии и заведёте полезные связи. А ещё со временем такое сотрудничество может вылиться в какой-то большой проект.
- Посещайте конференции, хакатоны, курсы, вебинары, конкурсы. Найти подходящее событие для программистов можно у нас.
А ещё?
Не заставляйте себя всё время сидеть за изучением скучной теории, не пытайтесь писать код, если он «не идёт». Лучше учитесь, развлекаясь. Например, читайте наши материалы:
- 20 вещей, которые отличают PHP-программиста от обезьянки
- Задачи для программистов, ответы на задания различной сложности
И играйте в игры для программистов. Для изучения PHP обратите внимание на CodinGame и CodeWars.
Самые основы. Как работает PHP.
Отличие веб-приложения от обычной программы
Начиная писать программы для веба, многие начинающие программисты сталкиваются с тем, что поведение веб-приложения отличается от обычной программы. Они по привычке рассматривают систему браузер-сервер, как обычное приложение. Интерактивное. Нажал кнопку — система среагировала. Провел мышкой — среагировала. Вся информация, которая доступна клиенту — доступна и программе, программа все время находится в памяти.
Так вот, в веб-программировании это не так.
В момент, когда пользователь видит перед собой страницу и начинает совершать какие-то действия с ней, PHP уже завершил работу! И пользователь взаимодействует не с PHP скриптом, а со своим браузером, в котором отображается HTML, который РНР отправил в браузер. Результатом работы скрипта на PHP в большинстве случаев является обычный текст. Текст HTML страницы. Которая отдается браузеру и показывается им, как обычный HTML. Вы сами можете в этом убедиться, написав в скрипте
Вася!» ; ?> ;
и потом просмотрев в браузере исходный текст полученной страницы. Никаких тегов PHP там нет! Только
Привет, Вася!
Потому что PHP исполняется на сервере!
Сервер и браузер общаются, посылая друг другу запросы по особому протоколу — HTTP. Соединение может инициировать только браузер. Он посылает серверу запрос — показать такой-то файл. Сервер клиенту файл посылает.
Только так и происходит. Клиент запросил — сервер отдал. И забыл сразу о клиенте. Отсюда становится понятным ответ на вопрос, можно ли точно узнать, сколько юзеров сечас на сайте. Нельзя. Потому что «на сайте» нету ни одного. Они соединяются, запрашивают страницу, и отсоединяются. Не имеют постоянного соединения с сервером, как, например, игроки в Кваку. Узнать можно только примерно, записывая время каждого соединения и выбирая записи за определенный промежуток времени.
Так же отсюда становится ясно, что сервер может узнать о клиенте очень мало. Только то, что клиент пришлет в HTTP-запросе. Разрешения экрана там нет 😉
Все, что сервер может знать о клиенте, можно посмотреть командой phpinfo()
Пример общения браузера с сервером:
Пользователь нажимает на ссылку, браузер посылает запрос серверу и ждет ответа:
Браузер -> PHP
PHP выполняет скрипт, отдает результат в браузер и завершает работу:
PHP -> браузер
Браузер отображает страницу, «просматривая» её на предмет ссылок, которые надо запросить у сервера (теги , и так далее) и посылает соответствующие запросы. Их можно увидеть, просматривая обмен заголовками, о чем речь будет чуть ниже:
Браузер -> сервер, Браузер -> сервер, Браузер -> сервер.
Пользователь заполняет форму и нажимает на кнопку:
Браузер -> PHP
PHP обрабатывает форму, записывает данные в базу и посылает браузеру заголовок
Location:
PHP -> браузер
Браузер, получив этот заголовок, запрашивает указанную страницу
Браузер -> PHP
PHP выполняет ее. и так далее.
Как работает РНР, где он выполняется?
РНР выполняется на сервере. Браузер посылает серверу запрос на страницу с php кодом. Сервер отдает эту страницу на исполнение интерпретатору PHP, интерпретатор генерирует HTML код, отдает серверу, а сервер посылает клиенту. Никакого РНР кода в браузер не попадает (это важно! Это значит, что увидеть исходный код PHP скрипта невозможно!). Единственный способ отправить что-то скрипту — это кликнуть по ссылке или нажать на кнопку в форме. Так, чтобы РНР обрабатывал какие-то действия пользователя в браузере — невозможно. РНР остался на сервере, ждать новых запросов с данными для обработки. PHP, но не скрипт! Скрипт, который выполнялся, отдавая пользователю страницу, завершил работу. Все данные, которые были в нем — пропали. Именно поэтому, если какая-то переменная нужна при последующих вызовах скрипта, ее надо этому скрипту передать снова.
Очень качественная и подробная статья об основах веб-программирования находится на сайте PHPWIKI.RU. Обязательно прочитайте её.
Как передать переменную из PHP в JavaScript и обратно?
Начнем с того, что никакую переменную передать, конечно же, невозможно. Поскольку переменная — это часть программы. И из одной в другую передать её нельзя. Передать можно только значение переменной. Т.е. текст. То есть, различия между «передачей переменной в яваскрипт» и формированием html таблицы НЕТ НИКАКОГО.
Отсюда вывод — «Передать переменную» в Javascript очень легко. Особенно, повторюсь, если учесть, что никакой «передачи» не происходит. PHP просто напросто генерирует яваскрипт точно так же, как и всю остальную страницу, вместе со всеми переменными.
Точно так же, как вы выводите в браузер строку «Hello World, это Вася Пупкин!», выводится и любой яваскрипт, со всеми своими переменными.
Единственное условие — вы должны представлять себе тот яваскрипт, который хотите получить.
К примеру в PHP есть переменная $name=»Вася» , значение которой надо передать в яваскрипт, чтобы получить
Мы просто пишем
$name = «Вася» ;
?>
То есть, фактически, мы просто сформировали нашим PHP скриптом некий текст, который выглядит, как нужный нам код на яваскрипте. Или, с другой стороны, мы писали свой яваскрипт, в нужных местах вставляя вывод переменных из PHP.
Чтобы не сойти с ума от разнообразных кавычек, настоятельно рекомендуется яваскрипт выводить не весь с помощью echo, а именно так, как написано здесь — закрыв тег PHP и открывая их только там, где нужно вывести переменную.
Как передать переменную из яваскрипта в PHP?
Точно так же, как и любые другие данные — послав запрос на сервер.
Но надо четко понимать, что во время выполнения php скрипта получить что-либо из яваскрипта, разумеется, невозможно. Передать можно будет только при следующем запросе. И обрабатывать его будет уже другой PHP скрипт.
Если надо по событию onClick обратиться к базе данных, то следует помнить, что она находится на сервере. То есть, надо запрашивать сервер, который запустит PHP скрипт, который обратится к базе, получит от неё ответ и передаст его в браузер.
Все вышеизложенное не противоречит, разумеется, модной технологии асинхронного общения браузера с сервером. Все методы остались те же, просто общение с сервером выполняет не сам браузер, а программа на яваскрипте.
Подробнее можно почитать на ресурсах, посвященных яваскрипту. С точки зрения PHP запросы по технологии AJAX ничем не отличаются от обычных.
Способы общения браузера с сервером.
Способов, предоставляемых протоколом HTTP, немного. Это важная информация. Никаких других способов нет. На практике используются два:
GET — это когда данные передаются в адресной строке, например, когда пользователь жмет ссылку.
POST — когда он нажимает кнопку в форме.
Сформировали страницу со ссылкой или с формой методом GET — запрос придет GET-ом. Сформировали с формой, в которой указан метод POST — придет POST-ом.
Определить, какой способ следует применять, очень просто. Если форма служит для запроса некой информации, например — при поиске, то ее следует отправлять методом GET. Чтобы можно было обновлять страницу, можно было поставить закладку и или послать ссылку другу.
Если же в результате отправки формы данные записываются или изменяются на сервере, то следует их отправлять методом POST, причем обязательно после обработки формы надо перенаправить браузер методом GET. Так же, POST может понадобиться, если на сервер надо передать большой объём данных (у GET он сильно ограничен), а так же, если не следует «светить» передаваемые данные в адресной строке (при вводе логина и пароля, например). Но в любом случае, после обработки POST надо всегда перенаправлять браузер на какую-нибудь страницу, пусть ту же самую, но уже без данных формы, чтобы при обновлении страницы они не записывались повторно. Например:
header(«Location: http://».$_SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’]);
exit;
Самое главное, что надо помнить: сервер по своей инициативе обратиться к клиенту не может. Мы можем только по факту запроса выдать что-то браузеру — либо страницу, либо команду запросить другой ресурс.
Полезная информация может содержаться в различных НТТР заголовках.
Cookie — если сервер поставил куку, и она не устарела, то браузер отсылает ее вместе с каждым запросом.
HTTP authentication — если сервер запрашивал HTTP авторизацию, то браузер при каждом обращении шлет введенные логин и пароль.
РНР может посылать HTTP заголовки двумя командами — header() и setcookie() .
Просмотр обмена HTTP заголовками
Я очень рекомендую попрактиковаться с HTTP заголовками, посмотреть, как ими обмениваются сервер и клиент.
Для этого надо нажать в браузере F12 чтобы открыть Инструменты разработчика, выбьрать там вкладку Сеть и иам будут отображаться все запросы, которые браузер делает к серверу, причем каждый можно рассмотреть в подробностях.
Обязательно попрактикуйтесь в просмотре HTTP заголовков, которыми обменивается браузер с сервером. Это очень хорошая практика, а так же проверка — что шлет твой скрипт. Удобно при отладке установки кук или проблемах с сессиями.
Примерное представление о пришедших заголовках можно также получить, воспользовавшись функцией getallheaders() . Но следует учитывать, что работает она только если PHP собран, как модуль.
ОЧЕНЬ ВАЖНОЕ ЗАМЕЧАНИЕ
Из того факта, что PHP исполняется на сервере, и посылает результат своей работы браузеру, следует один простой, но очень важный вывод. Что PHP в принципе НЕ МОЖЕТ отобразить в браузере ничего такого, что невозможно было бы сделать средствами html.
ПРЕЖДЕ, чем что-то писать на PHP — попробуйте это сделать чистым HTML.
«Нажатие на Энтер» не переводит строку? А в html вы не пробовали таким образом строки переводить? Не получилось? Какая досада. Прочитайте, как в html сделать перевод строки и приходите снова.
PHP в результате своей работы формирует не картинку с текстами, как вы ее видите на экране монитора. PHP формирует HTML код. И этот код ЗНАЧИТЕЛЬНО отличается от того изображения, которое вы видите на экране. Если у вас что-то не получается, то надо всегда смотреть именно ИСХОДНЫЙ код страницы, а не то, как вам ее рисует браузер. Для просмотра надо нажать клавиши Ctrl-U.
Если у вас не работает яваскрипт, сформированный PHP скриптом, или html показывает не то, что вы хотите, то исправить эту проблему очень просто.
1. Сначала пишете нужный яваскрипт или html руками. Если у вас с этим проблемы — обратитесь в соответствующий форум — по яваскрипту или html. PHP тут не при чём.
2. Сравниваете с тем, что получено из PHP
3. Вносите исправления в PHP скрипт, чтобы текст, отдаваемый им, не отличался от написанного руками.
Браузер не умеет показывать файлы, в которые напихан одновременно и html картинки. Браузер умеет показывать только известные ему типы данных. В частности, это ИЛИ html ИЛИ картинка. Но не вместе. Если картинка — то ОДНА. Несколько картинок подряд браузер показывать не умеет. Браузер умеет показывать HTML, в котором прописаны ССЫЛКИ на несколько картинок.
Пожалуйста, прежде, чем изучать PHP — изучите хотя бы основы HTML! Прежде, чем что-то требовать от PHP — попробуйте сделать это на html.
