Язык программирования PHP очень и очень свободный. Из-за этого, к сожалению, есть много способов написать тоже самое и не знать, что можно лучше. В этом топике я опишу несколько мелочей, полезных начинающим и немного продвинутым PHP программистам.
php.net предлагает небольшую статейку о разнице между ними, но она не очень информативна
Функциональная разница между ними только та, что
возвращает
<br>
<br>
Разница не в счёт, поэтому будем говорить о них как об одинаковых конструктах.
В скорости
Можно много говорить о том, что разница в скорости очень мизерная, но если разницы в функциональности никакой, то зачем использовать
(здесь я буду использовать
Два вида кавычек используются в PHP для вывода текста — простые (
В простых кавычках парсер ищет только простую кавычку (как символ конца) и обратный слэш (для ввода простой кавычки). В двойных же парсер умеет многое другое. Например — видеть переменные (
Очевидно, что простые кавычки побыстрее, парсеру почти не надо думать. Но самое главное — это читабельность кода. Конструкции в двойных кавычках не только тяжелее воспринимать взглядом, многие редакторы с подсветкой кода их не могут разглядеть (разумеется, такие монстры, как ZDE справляются с этим без проблем, но ведь человек, редактирующий код после Вас может его и не иметь).
Команда
В PHP есть конструкция «HEREDOC». Выглядит она так:
Здесь вместо «HEREDOC» может быть что угодно.
Правда, знать про эту конструкцию нужно только то, что она в десять раз медленее своих коллег, не очень читабельна и поэтому её лучше не использовать.
Мало кто знает, что ставить эту конструкцию в конец файла не надо. Мало того, гораздо лучше, когда его там нет, тогда нету опасности, что там проскочит пробел и разрушит далее посылаемые
php.net и Zend Framework тоже так <a href="думают.
Часто эти функции используются без понимания разницы между ними.
Эти две функции парсят содержимое файла, как PHP файла.
Запись в файл с пятой версии PHP очень проста:
Для сохранения backwards-compatibility, можно использовать этот код:
Содержание
echo
или print
Функциональность
php.net предлагает небольшую статейку о разнице между ними, но она не очень информативна
Функциональная разница между ними только та, что
print()
возвращает
1
, а
echo
ничего не возвращает. Сказаться это может если только в таком коде:<br>
($success) ? echo 'Ура!': echo 'Увы...';
<br>
print
тут работал бы. В любом случае такое предложение в PHP не корректно и лучше было бы использовать<br>
echo ($success) ? 'Ура!' : 'Увы...';.
Разница не в счёт, поэтому будем говорить о них как об одинаковых конструктах.
Скорость
echo
ничего не возвращает и поэтому чуть-чуть быстрее. Разница в парсинге смешная, но вот что интереснее: «echo» — четыре буквы, лежащие очень удобно под рукой, а «print» — пять, и чуть похуже расположенных.В скорости
echo
предпочтительней.Вывод
Можно много говорить о том, что разница в скорости очень мизерная, но если разницы в функциональности никакой, то зачем использовать
print
? Наш выбор —
echo
!Постройка текста для вывода
(здесь я буду использовать
echo
, но всё так-же относится и к print
)Выясняем отношения с кавычками
Два вида кавычек используются в PHP для вывода текста — простые (
'
) и двойные ("
). Разница между ними очень большая.В простых кавычках парсер ищет только простую кавычку (как символ конца) и обратный слэш (для ввода простой кавычки). В двойных же парсер умеет многое другое. Например — видеть переменные (
echo "Hello, $name!";
), символы (echo "Hello\nworld!";
) и даже более хитрые переменные (echo "${config['hello']}, ${position}th world!";
).Очевидно, что простые кавычки побыстрее, парсеру почти не надо думать. Но самое главное — это читабельность кода. Конструкции в двойных кавычках не только тяжелее воспринимать взглядом, многие редакторы с подсветкой кода их не могут разглядеть (разумеется, такие монстры, как ZDE справляются с этим без проблем, но ведь человек, редактирующий код после Вас может его и не иметь).
Точка или запятая?
Команда
echo
имеет такой синтаксис:echo string $arg1 [, string $...] )
, т. е. можно писать как echo 'Hello,' , 'world!';
так и echo 'Hello,' . 'world!';
. В первом случае мы передаём два параметра, во втором один: склееный оператором склейки. Используя точку мы заставляем парсер на время всё схватить в память и склеить, как указывает Wouter Demuynck, поэтому запятые оказываются побыстрее (разумеется, проверено тестами).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
readfile
просто выбрасывает содержимое файла в output. Если вам надо показать меню или баннер, то эта функция — как раз.include и require
Эти две функции парсят содержимое файла, как PHP файла.
require
, не найдя файла говорит «Аааа! Стойте!» и бросает фатальную ошибку. include
же относится к ошибке спокойно и просто даёт warning, не прерывая выполнения. Вывод — require нужна гораздо чаще...._once?
include
и
require
можно пополнять постфиксом «_once»:
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;
}
}
}