Ключевые синтаксические средства PHP для создания логики приложений

Раздел: Программирование на PHP -> Синтаксис PHP

Основные конструкции языка PHP

Эффективное решение для проверки одного условия

Конструкция if позволяет выполнить блок кода при истинности выражения. Это базовая управляющая структура.


<?php
$age = 25;
if ($age >= 18) {
    echo "Совершеннолетний";
}
?>

конструкции языка php (конструкции языка php)

Результат:

Совершеннолетний

Forums forums php list (вывод списка форумов через list())

Проблема: забывают фигурные скобки при выполнении нескольких операторов. Решение: всегда использовать скобки, даже для одного оператора.

Как сделать выбор из нескольких альтернатив?

Конструкция if...elseif...else или switch. Пример с switch:


<?php
$day = 3;
switch ($day) {
    case 1:
        echo "Понедельник";
        break;
    case 2:
        echo "Вторник";
        break;
    default:
        echo "Другой день";
}
?>

Php список значений (список значений в php)

Ошибка: пропущенный break вызывает выполнение следующих case. Решение: всегда проверять наличие break.

Цикл foreach для перебора массивов


<?php
$items = ['яблоко', 'груша', 'слива'];
foreach ($items as $item) {
    echo "$item ";
}
?>

Php open tag (открывающий тег php)

яблоко груша слива

Php syntax (синтаксис php)

Проблема: изменение массива внутри foreach может привести к неожиданным результатам. Решение: использовать ссылки с осторожностью.

Как выполнять код фиксированное количество раз?

Цикл for удобен для счетчика.


<?php
for ($i = 0; $i < 5; $i++) {
    echo $i . ' ';
}
?>
0 1 2 3 4

Объявление и вызов функции


<?php
function sum($a, $b) {
    return $a + $b;
}
echo sum(3, 5);
?>
8

Проблема: передача аргументов по ссылке без необходимости. Решение: по умолчанию передача по значению, ссылки явно указывать через &.

Как описать функцию с необязательными параметрами?

Параметры по умолчанию:


<?php
function greet($name, $greeting = 'Привет') {
    echo "$greeting, $name";
}
greet('Мир');
?>
Привет, Мир

Классы и объекты


<?php
class User {
    public string $name;
    public function __construct($name) {
        $this->name = $name;
    }
    public function sayHello() {
        return "Hello, {$this->name}";
    }
}
$user = new User('Анна');
echo $user->sayHello();
?>
Hello, Анна

Ошибка: забытие $this при обращении к свойствам внутри класса. Решение: всегда использовать $this->.

Как реализовать наследование?

<?php
class Admin extends User {
    public function sayHello() {
        return "Admin {$this->name}";
    }
}
$admin = new Admin('Иван');
echo $admin->sayHello();
?>
Admin Иван

Включение файлов


<?php
require_once 'config.php'; // или include
?>

Проблема: повторное включение вызывает ошибку переопределения.

Решение: использовать require_once или include_once.

Как обработать исключения?


<?php
try {
    if (true) throw new Exception('Ошибка');
} catch (Exception $e) {
    echo $e->getMessage();
} finally {
    echo ' завершено';
}
?>
Ошибка завершено

Ошибка: не перехватываются все типы исключений.

Решение: добавлять общий catch (\Throwable $e) или несколько блоков catch.

Расширенные примеры использования конструкций PHP

1. Рекурсивная функция с примером факториала

Пример

<?php
function factorial(int $n): int {
    if ($n <= 1) {
        return 1;
    }
    return $n * factorial($n - 1);
}
echo factorial(5);
?>
120

2. Использование match (PHP 8) вместо switch

Пример

<?php
$status = 200;
echo match($status) {
    200, 201 => 'Успех',
    400 => 'Неверный запрос',
    500 => 'Ошибка сервера',
    default => 'Неизвестный статус',
};
?>
Успех

3. Генератор с ключами

Пример

<?php
function rangeGenerator(int $start, int $end): Generator {
    for ($i = $start; $i <= $end; $i++) {
        yield $i => $i * 2;
    }
}
foreach (rangeGenerator(1, 3) as $key => $value) {
    echo "$key => $value ";
}
?>
1 => 2 2 => 4 3 => 6

4. Анонимная функция (замыкание) с использованием use

Пример

<?php
$multiplier = 10;
$callback = function($item) use ($multiplier) {
    return $item * $multiplier;
};
$result = array_map($callback, [1, 2, 3]);
var_dump($result);
?>
array(3) { [0]=> int(10) [1]=> int(20) [2]=> int(30) }

5. Трейты для повторного использования методов

Пример

<?php
trait Loggable {
    public function log(string $message) {
        echo "[LOG] $message\n";
    }
}
class Order {
    use Loggable;
}
$order = new Order();
$order->log('Заказ создан');
?>
[LOG] Заказ создан

6. Типизированные свойства классов (PHP 7.4+)

Пример

<?php
class Product {
    public string $name;
    public float $price;
    public function __construct(string $name, float $price) {
        $this->name = $name;
        $this->price = $price;
    }
}
$product = new Product('Ноутбук', 1200.50);
var_dump($product);
?>
object(Product)#1 (2) { ["name"]=> string(16) "Ноутбук" ["price"]=> float(1200.5) }

7. Пространство имён и autoloading (PSR-4)

Пример

<?php
// в файле App/Models/User.php
namespace App\Models;
class User { }
// в index.php
spl_autoload_register(function($class) {
    $path = str_replace('\\', '/', $class) . '.php';
    require __DIR__ . '/' . $path;
});
$user = new \App\Models\User();
var_dump($user);
?>
object(App\Models\User)#1 (0) { }

8. Альтернативный синтаксис управляющих структур (для шаблонов)

Пример

<?php if ($condition): ?>
    <p>Условие истинно</p>
<?php else: ?>
    <p>Условие ложно</p>
<?php endif; ?>

Результат

(вывод в зависимости от $condition)

Конструкции языка PHP - comments

En
конструкции языка php (php)