Язык программирования PHP очень и очень свободный. Из-за этого, к сожалению, есть много способов написать тоже самое и не знать, что можно лучше. В этом топике я опишу несколько мелочей, полезных начинающим и немного продвинутым PHP программистам.
php.net предлагает небольшую статейку о разнице между ними, но она не очень информативна
Функциональная разница между ними только та, что
возвращает
<br>
<br>
Разница не в счёт, поэтому будем говорить о них как об одинаковых конструктах.
В скорости
Можно много говорить о том, что разница в скорости очень мизерная, но если разницы в функциональности никакой, то зачем использовать
(здесь я буду использовать
Два вида кавычек используются в PHP для вывода текста — простые (
В простых кавычках парсер ищет только простую кавычку (как символ конца) и обратный слэш (для ввода простой кавычки). В двойных же парсер умеет многое другое. Например — видеть переменные (
Очевидно, что простые кавычки побыстрее, парсеру почти не надо думать. Но самое главное — это читабельность кода. Конструкции в двойных кавычках не только тяжелее воспринимать взглядом, многие редакторы с подсветкой кода их не могут разглядеть (разумеется, такие монстры, как ZDE справляются с этим без проблем, но ведь человек, редактирующий код после Вас может его и не иметь).
Команда
В PHP есть конструкция «HEREDOC». Выглядит она так:
Здесь вместо «HEREDOC» может быть что угодно.
Правда, знать про эту конструкцию нужно только то, что она в десять раз медленее своих коллег, не очень читабельна и поэтому её лучше не использовать.
Мало кто знает, что ставить эту конструкцию в конец файла не надо. Мало того, гораздо лучше, когда его там нет, тогда нету опасности, что там проскочит пробел и разрушит далее посылаемые
php.net и Zend Framework тоже так <a href="думают.
Часто эти функции используются без понимания разницы между ними.
Эти две функции парсят содержимое файла, как PHP файла.
Запись в файл с пятой версии PHP очень проста:
Для сохранения backwards-compatibility, можно использовать этот код:
Содержание
илиecho
Функциональность
php.net предлагает небольшую статейку о разнице между ними, но она не очень информативна
Функциональная разница между ними только та, что
print()
возвращает
, а1
ничего не возвращает. Сказаться это может если только в таком коде:<br>echo
($success) ? echo 'Ура!': echo 'Увы...';
<br>
тут работал бы. В любом случае такое предложение в PHP не корректно и лучше было бы использовать
<br>
echo ($success) ? 'Ура!' : 'Увы...';.
Разница не в счёт, поэтому будем говорить о них как об одинаковых конструктах.
Скорость
ничего не возвращает и поэтому чуть-чуть быстрее. Разница в парсинге смешная, но вот что интереснее: «echo» — четыре буквы, лежащие очень удобно под рукой, а «print» — пять, и чуть похуже расположенных.echo
В скорости
предпочтительней.echo
Вывод
Можно много говорить о том, что разница в скорости очень мизерная, но если разницы в функциональности никакой, то зачем использовать
? Наш выбор —
!echo
Постройка текста для вывода
(здесь я буду использовать
, но всё так-же относится и кecho
)
Выясняем отношения с кавычками
Два вида кавычек используются в PHP для вывода текста — простые (
) и двойные ('
). Разница между ними очень большая."
В простых кавычках парсер ищет только простую кавычку (как символ конца) и обратный слэш (для ввода простой кавычки). В двойных же парсер умеет многое другое. Например — видеть переменные (
), символы (echo "Hello, $name!";
) и даже более хитрые переменные (echo "Hello\nworld!";
).echo "${config['hello']}, ${position}th world!";
Очевидно, что простые кавычки побыстрее, парсеру почти не надо думать. Но самое главное — это читабельность кода. Конструкции в двойных кавычках не только тяжелее воспринимать взглядом, многие редакторы с подсветкой кода их не могут разглядеть (разумеется, такие монстры, как ZDE справляются с этим без проблем, но ведь человек, редактирующий код после Вас может его и не иметь).
Точка или запятая?
Команда
имеет такой синтаксис:echo
, т. е. можно писать какecho string $arg1 [, string $...] )
так иecho 'Hello,' , 'world!';
. В первом случае мы передаём два параметра, во втором один: склееный оператором склейки. Используя точку мы заставляем парсер на время всё схватить в память и склеить, как указывает Wouter Demuynck, поэтому запятые оказываются побыстрее (разумеется, проверено тестами).echo 'Hello,' . 'world!';
heredoc?
В PHP есть конструкция «HEREDOC». Выглядит она так:
echo <<<HEREDOC<br> Hello,<br> world,<br> I love you!<br> HEREDOC;<br>
Здесь вместо «HEREDOC» может быть что угодно.
Правда, знать про эту конструкцию нужно только то, что она в десять раз медленее своих коллег, не очень читабельна и поэтому её лучше не использовать.
Конец строки
читабельнее чемdefine('N',PHP_EOL); echo 'foo' . N;
, но это сугубо моё мнение и здесь я не уверен.echo "foo\n";<br> echo 'foo' . "\n";
Смысл ?>
Мало кто знает, что ставить эту конструкцию в конец файла не надо. Мало того, гораздо лучше, когда его там нет, тогда нету опасности, что там проскочит пробел и разрушит далее посылаемые
.header()
functions.php:<br> <php<br> function foo()<br> {<br> ...<br> }<br> function bar()<br> {<br> ...<br> }<br>
php.net и Zend Framework тоже так <a href="думают.
require, include, readfile
Часто эти функции используются без понимания разницы между ними.
readfile
просто выбрасывает содержимое файла в output. Если вам надо показать меню или баннер, то эта функция — как раз.readfile
include и require
Эти две функции парсят содержимое файла, как PHP файла.
, не найдя файла говорит «Аааа! Стойте!» и бросает фатальную ошибку.require
же относится к ошибке спокойно и просто даёт warning, не прерывая выполнения. Вывод — require нужна гораздо чаще.include
..._once?
иinclude
можно пополнять постфиксом «_once»:require
. В таком случае парсер проверит, может он уже эти файлы добавил? Удобно для подключения библиотек в больших проектах. Можно не боясь добавлятьinclude_once; require_once<
в каждый модуль, где нужна библиотека.require_once
Запись в файл
Запись в файл с пятой версии PHP очень проста:
file_put_contents('filename','data');
Для сохранения backwards-compatibility, можно использовать этот код:
// File put contents if (!defined('FILE_APPEND')) define('FILE_APPEND',1); if (!function_exists('file_put_contents')) { function file_put_contents($n, $d, $flag = false) { $mode = ($flag == FILE_APPEND || strtoupper($flag) == 'FILE_APPEND') ? 'a' : 'w'; $f = @fopen($n, $mode); if ($f === false) { return 0; } else { if (is_array($d)) $d = implode($d); $bytes_written = fwrite($f, $d); fclose($f); return $bytes_written; } } }
