Основы синтаксиса языка PHP

Раздел: Основы PHP -> Базовые примеры 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-типы делают сигнатуры функций более гибкими.

Примеры синтаксиса PHP - comments

En
Php синтаксис примеры (php)