Основы синтаксиса языка PHP
Основные синтаксические конструкции PHP
В PHP существует несколько способов выполнения одних и тех же задач. Рассмотрим основные варианты для часто используемых операций.
Вывод данных
Основной способ: echo
Для вывода строки или значения переменной используется конструкция echo. Она не возвращает значение и может принимать несколько аргументов.
$name = "Анна";
echo "Привет, $name!";Php синтаксис примеры (примеры синтаксиса php)
Привет, Анна!
Ошибка: если забыть точку с запятой, возникнет синтаксическая ошибка. Важно завершать каждую инструкцию точкой с запятой.
Как вывести строку с использованием print?
print "Текст";
print возвращает 1, поэтому может использоваться в выражениях, но менее гибкий, чем echo.
Нельзя передать несколько аргументов через запятую, в отличие от echo.
Как отформатировать вывод с помощью printf?
$num = 42;
printf("Число: %d, строка: %s", $num, "пример");
Число: 42, строка: пример
printf позволяет вставлять значения с форматированием. Используется когда нужен контроль над типом выводимых данных.
Путаница с типами: если указать %d для строки, получится 0 или ошибка. Необходимо соответствие.
Как сохранить отформатированную строку в переменной с помощью sprintf?
$str = sprintf("Результат: %.2f", M_PI);
echo $str;
Результат: 3.14
sprintf работает как printf, но возвращает строку, а не выводит её. Полезно для подготовки сообщений.
Как использовать heredoc для многострочного вывода?
$name = "Иван";
$text = <<
Привет, Иван! Это многострочный текст.
Heredoc обрабатывает переменные внутри, как двойные кавычки. Удобен для больших блоков HTML.
Ошибка: закрывающий идентификатор (EOT) не должен содержать отступов перед ним, иначе синтаксическая ошибка.
Переменные и константы
Объявление переменной
Переменные в PHP начинаются с символа $. Тип определяется автоматически.
$number = 10;
$name = "Мария";
echo $number . " " . $name;
10 Мария
Ошибка: использование необъявленной переменной приводит к предупреждению. Рекомендуется инициализировать переменные.
Как задать константу с помощью define?
define("SITE", "example.com");
echo SITE;
example.com
Константы не требуют знака доллара и не могут быть изменены после определения. Используются для хранения неизменяемых значений.
Как объявить константу с помощью const?
const VERSION = "1.0";
echo VERSION;
const работает на этапе компиляции, define - во время выполнения. const обычно используется внутри классов.
const нельзя использовать с выражениями, содержащими вызовы функций. Для этого подходит define.
Как включить строгую типизацию?
declare(strict_types=1);
function add(int $a, int $b): int {
return $a + $b;
}
echo add(2, 3);
5
Директива declare включает строгий режим, при котором типы аргументов и возвращаемого значения проверяются жестко.
Попытка передать строку вместо целого числа вызовет TypeError.
Условные операторы
Конструкция if-elseif-else
$score = 85;
if ($score >= 90) {
echo "Отлично";
} elseif ($score >= 70) {
echo "Хорошо";
} else {
echo "Удовлетворительно";
}
Хорошо
Частая ошибка: путаница между = и == в условии. Использование одного знака равенства присваивает значение, а не сравнивает.
Как использовать тернарный оператор?
$age = 20;
$status = ($age >= 18) ? "Взрослый" : "Ребенок";
echo $status;
Взрослый
Тернарный оператор - сокращенная форма if-else. Подходит для простых условий.
Избегать вложенных тернарных операторов, так как код становится трудночитаемым.
Как применить конструкцию match?
$day = "вт";
$result = match($day) {
"пн" => "Понедельник",
"вт", "ср" => "Середина недели",
default => "Другой день"
};
echo $result;
Середина недели
match (доступен с PHP 8) возвращает значение и поддерживает несколько условий через запятую. Альтернатива switch без необходимости break.
Если ни одно условие не совпало и нет default, выбрасывается UnhandledMatchError.
Циклы
Цикл foreach для массивов
$colors = ["красный", "зеленый", "синий"];
foreach ($colors as $color) {
echo "$color ";
}
красный зеленый синий
Изменение массива внутри foreach по значению не влияет на оригинал. Для изменения используйте &$value.
Как использовать цикл for?
for ($i = 1; $i <= 5; $i++) {
echo $i . " ";
}
1 2 3 4 5
Цикл for удобен, когда известно количество итераций.
Бесконечный цикл при неправильном условии.
Как организовать цикл while?
$count = 0;
while ($count < 3) {
echo $count . " ";
$count++;
}
0 1 2
while проверяет условие перед каждой итерацией. Подходит для ситуаций с неизвестным числом повторений.
Функции
Объявление обычной функции
function greet($name) {
return "Привет, $name!";
}
echo greet("Ольга");
Привет, Ольга!
Повторное объявление функции вызывает фатальную ошибку. Используйте function_exists для проверки.
Как создать анонимную функцию?
$multiply = function($a, $b) {
return $a * $b;
};
echo $multiply(4, 5);
20
Анонимные функции полезны как callback-параметры (например, array_map).
Как использовать стрелочную функцию?
$add = fn($x, $y) => $x + $y;
echo $add(3, 7);
10
Стрелочные функции (PHP 7.4+) автоматически захватывают переменные из родительской области видимости. Короче и удобнее для коротких замыканий.
В теле допускается только одно выражение, которое и возвращается.
Расширенные синтаксические возможности
Именованные аргументы функций
В PHP 8 появилась возможность передавать аргументы по имени, не соблюдая порядок.
function createUser($name, $age = 18, $city = "Неизвестно") {
return "$name, $age, $city";
}
echo createUser(age: 25, name: "Анна");
Анна, 25, Неизвестно
При смешивании позиционных и именованных аргументов позиционные должны идти первыми, иначе ошибка.
Оператор объединения с null (??)
Позволяет избежать длинных проверок на isset.
$data = null;
echo $data ?? "Значение по умолчанию";
Значение по умолчанию
Цепочка: $a ?? $b ?? $c - вернет первое не null значение.
Оператор spaceship (<=>)
Возвращает -1, 0 или 1 в зависимости от сравнения двух выражений.
echo 5 <=> 10; // -1
echo 10 <=> 10; // 0
echo 15 <=> 10; // 1
-1 0 1
Используется в пользовательских функциях сортировки для краткости.
Spread-оператор в аргументах функции
Позволяет передать переменное количество аргументов.
function sum(...$numbers) {
return array_sum($numbers);
}
echo sum(1, 2, 3, 4);
10
Также можно распаковать массив при вызове функции: sum(...[1,2,3]).
Генераторы с yield
Позволяют создавать итераторы без написания полного класса.
function generateNumbers($start, $limit) {
for ($i = $start; $i <= $limit; $i++) {
yield $i;
}
}
foreach (generateNumbers(1, 3) as $num) {
echo "$num ";
}
1 2 3
Генераторы экономят память, так как не загружают все элементы сразу.
Генератор можно использовать только один раз. Для повторной итерации нужно создать новый.
Атрибуты (аннотации) в PHP 8
Атрибуты - структурированные метаданные для классов, методов, свойств.
#[\Attribute]
class Route {
public function __construct(public string $path) {}
}
#[Route("/api/users")]
class UsersController {}
$ref = new ReflectionClass(UsersController::class);
$attrs = $ref->getAttributes(Route::class);
echo $attrs[0]->newInstance()->path;
/api/users
Атрибуты заменяют docblock-аннотации и обрабатываются с помощью Reflection.
Union-типы
Начиная с PHP 8, можно указывать несколько типов через |.
function formatValue(int|float|string $value): string {
return "Значение: $value";
}
echo formatValue(42.5);
Значение: 42.5
Union-типы делают сигнатуры функций более гибкими.