ГЛАВА 5. Характеристика языка PHP

Описывается история возникновения, становления и развития языка PHP. Что нового было сделано за последние годы.

Что нового в PHP 7?

Среди новинок PHP 7 следует отметить:

  •  новые операторы <=> и ?? (см. главу 7);
  •  обработка ошибок реализована через механизм исключений, помимо существующего класса Exception, введен дополнительный класс Error, который позволяет перехватывать стандартные ошибки PHP (см. главу 26);
  •  анонимные классы (см. главу 23);
  •  поддержка скалярных типов аргументов и возвращаемых значений в функциях (см. главу 11);
  •  введен специальный синтаксис \u{00FF} для поддержки UTF-8 символов (см. главу 13);
  •  массивы-константы (см. главу 10);
  • допускается использование конструкции list (см. главу 10) совместно с объектами, реализующими интерфейс ArrayAccess (см. главу 29);
  • предопределенный класс IntlChar для обеспечения поддержки символов UTF-8 (см. главу 27);
  • класс Generator, представляющий генераторы PHP, получил метод getReturn(), позволяющий извлечь значение, возвращаемое ключевым словом return (см. главу 12);
  • делегирование генераторов с использованием ключевых слов yield from (см. главу 12);
  • регулярные Perl-выражения дополнены новой функцией preg_replace_callback_
    array() (см. главу 20);
  • новые функции random_int() (см. главу 15) и random_bytes() (см. главу 13);
  • параметры сессии теперь можно передавать через необязательный аргумент функции session_start() (см. главу 34).

Помимо нововведений, часть устаревших конструкций и расширений были окончательно удалены из PHP. Среди них можно отметить:

  • альтернативные теги <% и %>, а также <script language="php"> и </script>, которые можно было использовать вместо тегов <?php и ?>;
  • регулярные POSIX-выражения (ereg-функции), вместо них рекомендуется использовать регулярные Perl-выражения (см. главу 20);
  • расширение mysql, вместо него следует использовать либо объектно-ориентированное расширение mysqli, а лучше еще более новое расширение PDO (см. главу 37);
  • не допускается использование конструктора в стиле PHP 4, когда имя метода совпадает с именем класса (см. главу 22);

Основы

файл листинга /phpbasics/sq.php

  • PHP-скрипт может вообще не отличаться от обычного HTML-документа. Имея те же теги тест и т.д. пока не встретит открывающего тега <?php и закрывающего ?>
  • Между php тегами текст интерпретируется как программа и в HTML-документ не попадает.
  • Если же программе нужно что-то вывести, она должна воспользоваться оператором echo.

Получается, PHP устроен так, что любой текст, который расположен вне программных блоков, ограниченных <?php и ?>, выводится в браузер непосредственно, т. е. воспринимается как вызов оператора echo (последняя аналогия очень точна, и мы остановимся на ней чуть позже).

 PHP комментарии

// Однострочный
# Другой однострочный
/* Многострочный
Комментарий */

Переменные и строки

$dat = date("d.m y"); 
//переменной с именем  $dat присваивается значение, которое вернула функция date() (возможности этой функции будут подробно описаны в части III)
  • все переменные в PHP должны начинаться со знака $, потому что "так проще для интерпретации".
  • нет необходимости явно описывать переменные (как в C) 
  • нигде не указывается их тип (строка, число и т. д.). Интерпретатор сам решает, что, где и какого типа.
  • В конце каждого оператора должна стоять точка с запятой (;)

Далее ставим операторы  echo, выводящие текстовые строки, а также дату и время.

// Следующие записи равнозначны:
echo "<p>Текущая дата: $dat года</p>\n"; 
/* 
любая переменная начинаетсяся с символа $, 
что позволяет интерпретатору вставить ее прямо в строку символов на место $dat 
(конечно, в любую строку, а не только в параметры echo)
*/
// Можно и так - конструкция echo не ограничена по числу параметров:
echo "<p>Текущая дата: ", $dat, " года</p>\n";
echo "<p>Текущая дата: " . $dat . " года</p>\n"; 

Пример цикла

for ($i = 1; $i <= 5; $i++) { 
  echo "<li>$i в квадрате = " . ($i * $i); 
  echo ", $i в кубе = " . ($i * $i * $i) . "</li>\n"; 
}

В первой строке находится определение цикла for (счетчик $i, которому присваивается начальное значение 1, инкрементируется на единицу на каждом шаге, пока не достигнет шести). Затем следует блок, выполняющий вывод одной пары "квадрат-куб".

Мы намеренно сделали вывод в две строки, а не в одну, чтобы показать, что в PHP применяются те же самые правила группировки операторов, что и в C. А именно: несколько операторов можно сделать одним сложным оператором, заключив их в фигурные скобки, как это сделано выше.

Результат

<li>1 в квадрате = 1, 1 в кубе = 1</li> 
<li>2 в квадрате = 4, 2 в кубе = 8</li> 
<li>3 в квадрате = 9, 3 в кубе = 27</li> 
<li>4 в квадрате = 16, 4 в кубе = 64</li> 
<li>5 в квадрате = 25, 5 в кубе = 125</li>