Ключевые синтаксические средства 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)