PHP, необходимый для изучения Elang
Этот урок объясняет синтаксис, используемый в примерах фреймворка. Это целевое введение, а не замена полного руководства PHP. Небольшие фрагменты можно запускать в файле practice.php командой php practice.php.
Переменные и строки
Переменные PHP начинаются с $. Точка с запятой завершает инструкцию. Оператор точки соединяет строки:
<?php
declare(strict_types=1);
$name = 'Ada';
echo 'Hello, '.$name.'!';
Ожидаемый вывод: Hello, Ada!. Текст в кавычках — строка. 42 — целое число, а true — логическое значение. Типы важны при чтении JSON или объявлении типизированного параметра функции.
Массивы
Массив может содержать список значений или именованные поля:
$tags = ['php', 'elang'];
$post = ['title' => 'A small beginning', 'published' => true];
echo $post['title'];
Оператор => связывает ключ со значением. Ответы JSON Elang часто начинаются как массивы PHP. JSON — текстовый формат, передаваемый по HTTP; это не то же самое, что массив PHP в памяти.
Функции и возвращаемые значения
Функция объединяет переиспользуемое поведение. Типы параметров и возвращаемого значения описывают, что она принимает и возвращает:
function greeting(string $name): string
{
return 'Hello, '.$name.'!';
}
echo greeting('Ada');
return передаёт значение вызывающему коду. echo непосредственно выводит данные. В обработчике Elang возвращайте ответ вместо самостоятельного вывода, чтобы ядро могло корректно установить коды статуса и заголовки.
Анонимные и стрелочные функции
Маршрут может принимать анонимную функцию:
$router->get('/hello', function () {
return ['message' => 'Hello'];
});
Стрелочная функция — краткая форма выражения:
$router->get('/hello', fn () => ['message' => 'Hello']);
Эти примеры предполагают одинаковый ответ. Функция выполняется, когда соответствующий запрос достигает обработчика, а не просто потому, что маршрут зарегистрирован.
Классы и объекты
Класс описывает объект. new создаёт экземпляр; -> обращается к методу или свойству экземпляра:
final class Greeter
{
public function greet(string $name): string
{
return 'Hello, '.$name.'!';
}
}
$greeter = new Greeter();
echo $greeter->greet('Ada');
Контроллер — класс для обработки запросов. Сервис — класс с переиспользуемой ответственностью. Явное название этой ответственности упрощает понимание кода по мере роста проекта.
Конструкторы и внедрение зависимостей
Конструктор получает зависимости, необходимые объекту:
final class WelcomeController
{
public function __construct(private Greeter $greeter) {}
}
Краткий синтаксис private Greeter $greeter определяет и сохраняет свойство. Контейнер Elang может создать Greeter и передать его контроллеру. Это внедрение зависимостей; оно не требует глобального фасада или скрытой переменной.
Пространства имён и инструкции use
Полное имя класса включает его пространство имён:
namespace App\Controllers;
use Elang\Http\Response;
use позволяет файлу обращаться к существующему классу по более короткому имени. Он не скачивает и не устанавливает этот класс. Автозагрузчик Composer находит файл класса по отображению PSR-4 проекта.
В созданном приложении App\Controllers\HelloController должен находиться в app/Controllers/HelloController.php. Соблюдайте написание и регистр, особенно в Linux.
Статические вызовы и имена классов
Response::json(...) вызывает статический вспомогательный метод. HelloController::class возвращает полное имя класса строкой, чтобы маршрутизатор мог позднее запросить его у контейнера. Это не запускает контроллер немедленно.
Исключения
Исключение прерывает нормальное выполнение. Elang преобразует поддерживаемые HTTP-исключения и исключения валидации в ответы. Неожиданные исключения записываются в журнал и превращаются в безопасный ответ 500 в рабочей среде.
Не перехватывайте все исключения, делая вид, что запрос выполнен успешно. Используйте ожидаемый статус, изучайте ошибки и не включайте закрытые подробности в публичный вывод.
Быстрая самопроверка
Можете объяснить, почему маршрут возвращает массив, почему $name начинается со знака доллара, что означают -> и :: и почему инструкция use не устанавливает пакет? Если да, переходите к первому маршруту. Если термин незнаком, держите словарь открытым рядом с редактором.
Для более широкого знакомства с языком прочитайте официальный учебник PHP.