Статьи

30+ PHP Best Practices для начинающих

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

Примечание редактора: серия «Best Practices» была моим ребенком для трех статей . Тем не менее, из-за того, что я сфокусировался на серии видеороликов CI , я решил передать следующую запись Глену. Сказав это, я не очень хорошо держу рот на замке! Я подумал, что было бы забавно время от времени добавлять несколько опровержений к его советам. Надеюсь, он не против!

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

PHP эксперты по Envato Studio
PHP эксперты по Envato Studio

Если вы новичок в PHP, то пришло время познакомиться с удивительной особенностью руководства по PHP . Руководство по PHP невероятно тщательное и содержит действительно полезные комментарии после каждой статьи. Прежде чем задавать вопросы или пытаться самостоятельно разобраться в проблеме, сэкономьте время и просто переходите к руководству. Вероятность того, что ответ на ваш вопрос уже находится в полезной статье на сайте PHP.net.

Сообщения об ошибках в PHP очень полезны. В вашем коде вы найдете ошибки, которые вы, возможно, не заметили ранее, поскольку не все ошибки не позволяют приложению работать. Существуют различные уровни строгости в отчетах, которые вы можете использовать, но E_ALL покажет вам большинство ошибок, критических и предупреждений.

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

IDE (интегрированные среды разработки) являются полезными инструментами для любого разработчика. Хотя они не для всех, IDE определенно имеет свое место. IDE предоставляют такие инструменты, как

  • подсветка синтаксиса
  • завершение кода
  • предупреждения об ошибках
  • рефакторинг (переделка)

И много других возможностей. Существует множество отличных IDE , поддерживающих PHP.

Попробуйте IDE

Вы можете многое узнать о PHP, просто экспериментируя с PHP-фреймворками. Такие фреймворки, как CakePHP или CodeIgniter, позволяют быстро создавать приложения PHP без необходимости быть экспертом по PHP. В некотором смысле они почти как учебные круги PHP, которые показывают вам, как должно выглядеть приложение PHP, и показывают ценные концепции программирования (например, отделение логики от дизайна и т. Д.).

На Envato Market также есть несколько специализированных фреймворков, таких как Blaze и Frameworx .

Опровержение: я лично не рекомендовал бы, чтобы новички использовали структуру. Изучите основы в первую очередь. 🙂

DRY означает « Не повторяй себя» , и это ценная концепция программирования, независимо от языка. СУХОЕ программирование, как следует из названия, гарантирует, что вы не будете писать избыточный код. Вот пример из Рейнхольда Вебера :

Изучите СУХОЙ подход

Этот код …

1
2
$mysql = mysql_connect(‘localhost’, ‘reinhold’, ‘secret_hash’);
mysql_select_db(‘wordpress’) or die(«cannot select DB»);

теперь с сухим подходом:

1
2
3
4
5
6
7
$db_host = ‘localhost’;
$db_user = ‘reinhold’;
$db_password = ‘secret_hash’;
$db_database = ‘wordpress’;
  
$mysql = mysql_connect($db_host, $db_user, $db_password);
mysql_select_db($db_database);

Вы можете прочитать больше о принципе программирования DRY здесь и здесь .

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

Многоуровневое размещение ваших приложений — это не что иное, как разделение различных компонентов кода на разные части. Это позволяет вам легко изменить ваш код в будущем. Автор NETTUTS Джейсон Ленгсторф (Jason Lengstorf) написал отличную статью о том, как распределить ваши PHP-приложения для упрощения обслуживания.

Часто программисты пытаются использовать ярлыки при объявлении PHP. Вот несколько распространенных:

1
2
3
4
5
6
7
<?
    echo «Hello world»;
?>
 
<?=»Hello world»;
 
<% echo «Hello world»;

Хотя они сохраняют несколько символов, все эти методы устарели и неофициальны. Придерживайтесь стандартного <? Php?>, Так как он будет гарантированно поддерживаться во всех будущих версиях.

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

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

MySQL — самый популярный тип базы данных для использования с PHP (хотя и не единственный). Если вы хотите настроить локальную среду для разработки и тестирования приложений PHP на вашем компьютере, изучите установку MAMP (Mac) или WAMP (Windows). Установка MySQL на ваш собственный компьютер может быть утомительным процессом, и оба этих пакета программного обеспечения являются установками MySQL. Чисто и просто.

Установить MAMPWAMP

Ограничение времени для ваших PHP-скриптов — очень важная вещь. Бывают случаи, когда ваши скрипты терпят неудачу, и когда они это делают, вы захотите использовать функцию set_time_limit, чтобы избежать бесконечных циклов и таймаутов подключения к базе данных. Set_time_limit устанавливает ограничение по времени на максимальное количество секунд, в течение которых запускается скрипт (по умолчанию 30). По истечении этого времени выдается фатальная ошибка.

Объектно-ориентированное программирование (ООП) использует объекты для представления частей приложения. ООП не только позволяет разбить ваш код на отдельные логические разделы, но также уменьшает повторение кода и значительно упрощает его изменение в будущем. Если вы хотите узнать больше, у DevArticles есть отличная статья по объектно-ориентированному программированию на PHP .

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

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

Phpinfo прекрасная вещь. Просто создав файл PHP, который имеет

1
<?php phpinfo();

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

не помещайте phpinfo в свой веб-корень

Если в вашем приложении есть места для ввода данных пользователем, вы всегда должны предполагать, что они попытаются ввести непослушный код. (Мы не подразумеваем, что ваши пользователи — плохие люди. Это просто хорошее мышление.) Отличный способ сохранить ваш сайт без хакеров — всегда инициализировать переменные, чтобы защитить ваш сайт от атак XSS . В PHP.net есть пример правильно защищенной формы с инициализированными переменными:

1
2
3
4
5
6
7
8
9
<?php
   if (correct_user($_POST[‘user’], $_POST[‘password’]) {
       $login = true;
   }
 
   if ($login) {
       forward_to_secure_environment();
   }
   ?>

Многие начинающие PHP часто вставляют в базу данных важные данные, такие как пароли, без применения какого-либо шифрования. Подумайте об использовании MD5 для шифрования паролей, прежде чем помещать их в базу данных.

1
echo md5(‘myPassword’);

Опровержение: имейте в виду, однако, что хеши MD5 уже давно скомпрометированы. Они абсолютно более безопасны, чем нет, но, используя огромный «радужный стол», хакеры могут перекрестно ссылаться на ваш хэш. Чтобы добавить еще больше безопасности, рассмотрите возможность добавления соли. Соль — это в основном дополнительный набор символов, который вы добавляете в строку пользователя.

Если вам сложно планировать и изменять базы данных для ваших PHP-приложений, вы можете использовать инструмент визуализации баз данных. Пользователи MySQL могут работать с DBDesigner и MySQL Workbench для визуального проектирования ваших баз данных.

использовать средства проектирования визуализации базы данных

Буферизация вывода — это простой способ значительно повысить производительность и скорость вашего PHP-скрипта. Без буферизации вывода ваш скрипт будет отображать HTML на странице в процессе его обработки — по частям. Добавление буферизации вывода позволяет PHP сохранять HTML как переменную и отправлять его в браузер одним фрагментом.

Чтобы включить буферизацию вывода, просто добавьте ob_start (), как в верхней части файла.

Опровержение: хотя это и не требуется, обычно считается хорошей практикой идти вперед и добавлять «ob_end_flush ();» функции, а также в нижней части документа. PS Хотите также сжать HTML? Просто замените «ob_start ();» с «ob_start (‘ob_gzhandler’)»;

Обратитесь к этой статье Dev-tips для получения дополнительной информации.

01
02
03
04
05
06
07
08
09
10
11
12
<!DOCTYPE html>
<?php ob_start(‘ob_gzhandler’);
<html lang=»en»>
<head>
    <meta http-equiv=»Content-Type» content=»text/html; charset=utf-8″>
    <title>untitled</title>
</head>
<body>
      
</body>
</html>
<?php ob_end_flush();

Если вы не экранируете символы, используемые в строках SQL, ваш код уязвим для инъекций SQL. Вы можете избежать этого, используя mysql_real_escape_string или используя подготовленные операторы.

Вот пример mysql_real_escape_string в действии:

1
$username = mysql_real_escape_string( $GET[‘username’] );

и подготовленное заявление:

1
2
3
4
$id = $_GET[‘id’];
   $statement = $connection->prepare( «SELECT * FROM tbl_members WHERE id = ?» );
   $statement->bind_param( «i», $id );
   $statement->execute();

Используя подготовленные операторы, мы никогда не встраиваем введенные пользователем данные непосредственно в наш запрос. Вместо этого мы используем метод «bind_param» для привязки значений (и экранирования) к запросу. Гораздо безопаснее и, что особенно важно, быстрее при одновременном выполнении нескольких операторов CRUD.

Узнайте больше о создании безопасных приложений PHP на Nettuts.

Если вы пишете объектно-ориентированный PHP, то вы можете использовать изящное реляционное отображение объектов (ORM). ORM позволяет преобразовывать данные между реляционными базами данных и объектно-ориентированными языками программирования. Вкратце: ORM позволяет вам работать с базами данных так же, как вы работаете с классами и объектами в PHP.

Существует множество библиотек ORM для PHP, таких как Propel , а ORM встроен в PHP-фреймворки, такие как CakePHP .

Кэширование управляемых базой данных страниц PHP — отличная идея для улучшения загрузки и производительности вашего скрипта. На самом деле не так сложно создавать и извлекать статические файлы контента с помощью нашего хорошего друга ob_start (). Вот пример, взятый из Snipe.net :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
// TOP of your script
   $cachefile = ‘cache/’.basename($_SERVER[‘SCRIPT_URI’]);
   $cachetime = 120 * 60;
   // Serve from the cache if it is younger than $cachetime
   if (file_exists($cachefile) && (time() — $cachetime < filemtime($cachefile))) {
   include($cachefile);
   echo «<!— Cached «.date(‘jS FYH:i’, filemtime($cachefile)).» —>»;
   exit;
   }
   ob_start();
   // Your normal PHP script and HTML content here
   // BOTTOM of your script
   $fp = fopen($cachefile, ‘w’);
   fwrite($fp, ob_get_contents());
   fclose($fp);
   ob_end_flush();

Этот фрагмент кода будет использовать кэшированную версию страницы, которой менее 2 часов.

Если вам нужна более надежная система кэширования, есть несколько сценариев кэширования для PHP, которые могут быть более полными, чем приведенный выше пример.

использовать систему кеширования

Данные cookie, как и любые данные, передаваемые в Интернете, могут быть вредными. Вы можете проверить данные cookie с помощью htmlspecialchars () или mysql_real_escape_string () .

Помимо использования систем кэширования базы данных, таких как Memcached, вы также можете попробовать использовать систему шаблонов для повышения производительности ваших PHP-приложений. Smarty — это надежная система шаблонов, в которую встроено кэширование.

Профилирование вашего кода с помощью такого инструмента, как xdebug, поможет вам быстро обнаружить узкие места и другие потенциальные проблемы в вашем PHP-коде. Некоторые IDE, такие как Netbeans, также имеют возможности профилирования PHP.

Как только вы освоите PHP, вы можете начать изучать стандарт программирования. Существуют различия между стандартами (скажем, Zend и Pear ), и найти их и придерживаться их поможет в конечном итоге согласованность вашего кодирования.

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


Примечание редактора: думайте об этом так. Попробуйте удалить как можно больше операций из цикла. Вам действительно нужно создавать эту переменную для каждой итерации цикла? Вам действительно нужно создавать функцию каждый раз? Конечно, нет. 🙂

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

Плохо

1
2
$description = strip_tags($_POST[‘description’]);
   echo $description;

Хорошо

1
echo strip_tags($_POST[‘description’]);


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

Хотя это кажется здравым смыслом, многие люди не обновляют PHP так часто, как следовало бы. Между PHP 4 и PHP 5 наблюдается значительное повышение производительности. Проверьте свой сервер, чтобы быть в курсе.

В любом случае, вы можете сократить количество запросов к базе данных, тем лучше будет работать ваш PHP-скрипт. Существуют такие инструменты, как Stace (Unix) и Process Explorer (Windows), которые позволяют находить избыточные процессы и способы их объединения.

Уменьшить количество запросов к базе данных

Это только человеческая натура — хотеть скрыть тот факт, что мы мало знаем об определенной теме. Никто не любит быть n00b! Но как мы будем учиться, не спрашивая? Не стесняйтесь использовать форумы, IRC, StackOverflow, чтобы задавать вопросы более опытным PHP-разработчикам. На сайте PHP есть страница о том, как получить помощь по PHP .

У вас есть какие-либо опровержения? Я уверен, что вы делаете! Давайте начнем дискуссию.

PHP скрипты на рынке Envato
PHP скрипты на рынке Envato