Что вообще такое язык программирования? За этим понятием скрываются две связанных, но независимых темы.

Язык программирования

С одной стороны, языком программирования называют правила (синтаксические и семантические), по которым записывается и работает исходный код. В отличие от естественных языков, эти правила достаточно строги. Любая мельчайшая ошибка и код либо не запустится, либо запустится, но не заработает, как ожидается. Например, в PHP нельзя написать $name = 5 (без ; в конце). Эти правила существуют не только в книгах, но и в головах конкретных программистов и разработчиков языка. Они очень чётко описаны в спецификации, документе, который является эталоном и истиной в последней инстанции. Спецификация у языка, как правило, одна.

С другой стороны, языком программирования называют программу, которая непосредственно запускает (или компилирует) наш код. В предыдущем уроке мы как раз установили такую. Обычно её называют средой выполнения, иногда "рантаймом", если речь идёт про интерпретацию. Среда выполнения — конкретное воплощение спецификации. Интерпретаторов может быть сколько угодно, и делать их может кто угодно. Например, peachpie - он позволяет запускать PHP программы на платформе .NET.

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

PHP

PHP — динамический, слабо типизированный, интерпретируемый язык программирования. Разберём эти слова по отдельности.

Интерпретируемый

У PHP отсутствует стадия компиляции, как у языков, подобных Java или C. Код непосредственно передаётся в интерпретатор, который его выполняет по мере чтения. Поэтому любая программа на PHP состоит из текстовых файлов.

$ php -a
Interactive shell

php> echo 10 * 3 + sqrt(4);
32

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

Динамический

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

Слабо типизированный

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

php -a
Interactive shell

php > echo '234' + 4;
238

Дополнительные материалы

  1. Что такое компиляция
  2. Что такое интерпретация

Для продолжения нужно перейти в курс и вступить в него.