PHP: Инструкции (Statements)
Инструкция — это команда, которую исполняет интерпретатор PHP. Она написана на языке программирования. Ее можно сравнить с инструкцией или рецептом по приготовлению блюда:
Код на PHP — это набор инструкций, которые отделяются друг от друга символом ; .
Вот пример кода с двумя инструкциями:
Mother of Dragons. Dracarys!
При запуске этого кода на экран последовательно выводятся два предложения: Mother of Dragons. Dracarys! .
Инструкции можно написать последовательно друг за другом без переноса на новую строчку:
Mother of Dragons. Dracarys!
Результат на экране будет таким же. Но такой код неудобно читать, поэтому инструкции располагают друг под другом.
Задание
Выведите на экран друг за другом три имени: Robert, Stannis, Renly. В результате на экране должно отобразиться:
RobertStannisRenly
Для каждого имени используйте свой собственный вызов print_r() .
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Полезное
Определения
- Интерпретатор — программа, выполняющая код на PHP.
- Инструкция (statement) — команда для компьютера, написанная на языке программирования. Код на PHP — это набор инструкций, разделенных (чаще всего) символом ; .
Режимы работы интерпретатора PHP
Сравнение режимов работы интерпретатора PHP-скриптов
Панель управления ISPmanager поддерживает следующие режимы работы интерпретатора PHP:
PHP как модуль Apache
- Самая высокая скорость работы скриптов, по сравнению с другими методами.
- Простота работы, сервер сам обрабатывает скрипты.
- Общий конфигурационный файл для всех скриптов (php.ini).
- Возможность задания переменных конфигурации PHP в конфигурационном файле web-сервера или средствами файла .htaccess
- Все скрипты запускаются с правами, с которыми работает web-сервер, тем самым, если есть необходимость записи в какую либо директорию – права доступа необходимо дать на нее всем.
- В случае запуска сторонних приложений скриптами (например, почтовая рассылка), нет возможности идентифицировать пользователя, который запустил процесс.
- Излишняя нагрузка на web-сервер, apache занятый обработкой скриптов может медленно отдавать другие статические данные.
- Ошибки в скриптах могут привести к неработоспособности всего web-сервера
PHP как CGI
В случае работы PHP как CGI используется запуск PHP-скрипта через его передачу на выполнение непосредственно интерпретатору PHP.
- Все скрипты выполняются с правами пользователя – владельца www-домена.
- Возможность индивидуальной настройки PHP для каждого пользователя.
- Меньший расход оперативной памяти по сравнению с модулем apache
- Ошибки в скриптах не приводят к падению веб-сервера в отличие от режима PHP как модуль apache
- Проблемы с авторизацией средствами PHP (средствами команды Header) по причине того, что не передаются некоторые переменные сервера php-скрипту.
PHP как FastCGI
FastCGI — протокол взаимодействия между веб-серверов и приложением. Является продолжением развития такой технологии как CGI. Более безопасный и производительный, чем CGI.
При этом используется модуль Apache mod_fastcgi, скрипты передаются его средствами на вход интерпретатора PHP.
- За счет кэширования некоторых промежуточных данных скрипт не интерпретируется каждый раз при выполнении и достигается более высокая скорость по сравнению с PHP как CGI.
- Лишний процесс пользователя (php-cgi) находится в памяти после первого обращения к процессу.
Изменение режима работы PHP в ISPmanager
Настройка режима работы PHP для сайта осуществляется через меню Домены – WWW домены – свойства сайта – PHP, при условии, что все эти режимы разрешены пользователю – владельцу www-домена.
Как установить модули PHP
Модули PHP можно ставить через панель ISPmanager в разделе «PHP».
Как запустить скрипт PHP из планировщика cron?
Скрипт PHP можно запустить с помощью планировщика cron, прописав перед адресом скрипта:
/usr/bin/php-cgi /(путь. )/script.php
Скрипт PHP может находиться в любой директории, т.е. быть недоступным через FTP.
Интерпретатор PHP: а что там внутри…
Если совсем просто, интерпретатор PHP — это программа, которая выполняет скрипты на языке PHP. Он состоит из нескольких компонентов, которые работают вместе, чтобы обработать скрипт PHP и произвести вывод.
Перечислим эти компоненты:
- Lexer — это компонент, который разбирает исходный код на токены (ключевые слова, операторы, константы и т.д.).
- Parser — это компонент, который преобразует токены в абстрактное синтаксическое дерево (AST). AST — это структура данных, которая представляет скрипт на языке PHP в виде дерева, где каждый узел представляет собой операцию или конструкцию языка.
- Executor — это компонент, который выполняет инструкции, представленные в AST. Он просматривает каждый узел AST и выполняет соответствующую операцию.
- Zend Engine — это основной компонент интерпретатора PHP, который объединяет Lexer, Parser и Executor. Он также управляет работой с памятью, оптимизацией кода и другими внутренними аспектами языка.
- SAPI (Server Application Programming Interface) — это интерфейс между интерпретатором PHP и веб-сервером, который позволяет запускать скрипты на языке PHP на сервере. В PHP существует несколько различных SAPI, таких как Apache, CGI и FastCGI.
Начнем наш обзор с лексического анализатора.
Lexer (лексический анализатор) в PHP — это компонент, который преобразует исходный код на языке PHP в поток токенов. Он работает по следующему алгоритму:
- Получение кода на входе — Lexer получает на вход исходный код на языке PHP.
- Разбиение кода на лексемы — Lexer анализирует код и разбивает его на отдельные лексемы (ключевые слова, операторы, константы и т.д.).
- Создание токенов — Для каждой лексемы Lexer создает соответствующий токен, который содержит информацию о типе лексемы, ее значение и позиции в исходном коде.
- Формирование потока токенов — Lexer формирует поток токенов из созданных токенов, который передается на вход компоненту Parser для дальнейшей обработки.
- Обработка ошибок — В случае возникновения ошибки Lexer создает соответствующее исключение, которое передается на уровень выше для обработки.
Для примера работы лексера можно рассмотреть следующий код на языке PHP:
После применения лексера к этому коду получится поток токенов, который можно представить в виде таблицы:
Тип токена | Значение | Позиция в коде |
---|---|---|
T_FUNCTION | function | 1:1 |
T_WHITESPACE | 1:10 | |
T_STRING | helloWorld | 1:11 |
T_OPEN_PAREN | ( | 1:21 |
T_VARIABLE | $name | 1:22 |
T_CLOSE_PAREN | ) | 1:27 |
T_WHITESPACE | 1:28 | |
T_OPEN_CURLY | 2:1 | |
T_WHITESPACE | 2:2 | |
T_ECHO | echo | 3:5 |
T_WHITESPACE | 3:9 | |
T_CONSTANT_EN | «Hello, „ | 3:10 |
T_CONCAT_EQUAL | . | 3:18 |
T_VARIABLE | $name | 3:20 |
T_CONCAT_EQUAL | . | 3:24 |
T_CONSTANT_EN | “!» | 3:26 |
T_SEMICOLON | ; | 3:27 |
T_WHITESPACE | 4:1 | |
T_CLOSE_CURLY | > | 5:1 |
Каждый токен имеет свой тип, значение и позицию в исходном коде. Например, первый токен имеет тип T_FUNCTION, значение function и позицию 1:1 (1 строка, 1 символ), а последний токен имеет тип T_CLOSE_CURLY, значение >, и позицию 5:1 (5 строка, 1 символ).
Поток токенов, полученный после работы лексера, затем передается на вход компоненту Parser для дальнейшей обработки и выполнения скрипта.
продолжение следует.
Интерпретатор PHP: а что там внутри…
Если совсем просто, интерпретатор PHP — это программа, которая выполняет скрипты на языке PHP. Он состоит из нескольких компонентов, которые работают вместе, чтобы обработать скрипт PHP и произвести вывод.
Перечислим эти компоненты:
- Lexer — это компонент, который разбирает исходный код на токены (ключевые слова, операторы, константы и т.д.).
- Parser — это компонент, который преобразует токены в абстрактное синтаксическое дерево (AST). AST — это структура данных, которая представляет скрипт на языке PHP в виде дерева, где каждый узел представляет собой операцию или конструкцию языка.
- Executor — это компонент, который выполняет инструкции, представленные в AST. Он просматривает каждый узел AST и выполняет соответствующую операцию.
- Zend Engine — это основной компонент интерпретатора PHP, который объединяет Lexer, Parser и Executor. Он также управляет работой с памятью, оптимизацией кода и другими внутренними аспектами языка.
- SAPI (Server Application Programming Interface) — это интерфейс между интерпретатором PHP и веб-сервером, который позволяет запускать скрипты на языке PHP на сервере. В PHP существует несколько различных SAPI, таких как Apache, CGI и FastCGI.
Начнем наш обзор с лексического анализатора.
Lexer (лексический анализатор) в PHP — это компонент, который преобразует исходный код на языке PHP в поток токенов. Он работает по следующему алгоритму:
- Получение кода на входе — Lexer получает на вход исходный код на языке PHP.
- Разбиение кода на лексемы — Lexer анализирует код и разбивает его на отдельные лексемы (ключевые слова, операторы, константы и т.д.).
- Создание токенов — Для каждой лексемы Lexer создает соответствующий токен, который содержит информацию о типе лексемы, ее значение и позиции в исходном коде.
- Формирование потока токенов — Lexer формирует поток токенов из созданных токенов, который передается на вход компоненту Parser для дальнейшей обработки.
- Обработка ошибок — В случае возникновения ошибки Lexer создает соответствующее исключение, которое передается на уровень выше для обработки.
Для примера работы лексера можно рассмотреть следующий код на языке PHP:
После применения лексера к этому коду получится поток токенов, который можно представить в виде таблицы:
Тип токена | Значение | Позиция в коде |
---|---|---|
T_FUNCTION | function | 1:1 |
T_WHITESPACE | 1:10 | |
T_STRING | helloWorld | 1:11 |
T_OPEN_PAREN | ( | 1:21 |
T_VARIABLE | $name | 1:22 |
T_CLOSE_PAREN | ) | 1:27 |
T_WHITESPACE | 1:28 | |
T_OPEN_CURLY | 2:1 | |
T_WHITESPACE | 2:2 | |
T_ECHO | echo | 3:5 |
T_WHITESPACE | 3:9 | |
T_CONSTANT_EN | «Hello, „ | 3:10 |
T_CONCAT_EQUAL | . | 3:18 |
T_VARIABLE | $name | 3:20 |
T_CONCAT_EQUAL | . | 3:24 |
T_CONSTANT_EN | “!» | 3:26 |
T_SEMICOLON | ; | 3:27 |
T_WHITESPACE | 4:1 | |
T_CLOSE_CURLY | > | 5:1 |
Каждый токен имеет свой тип, значение и позицию в исходном коде. Например, первый токен имеет тип T_FUNCTION, значение function и позицию 1:1 (1 строка, 1 символ), а последний токен имеет тип T_CLOSE_CURLY, значение >, и позицию 5:1 (5 строка, 1 символ).
Поток токенов, полученный после работы лексера, затем передается на вход компоненту Parser для дальнейшей обработки и выполнения скрипта.
продолжение следует.