Ось і настав цей день — PHP 8.4 вже серед нас. Далеко від того, щоб знецінитися і потрапити в забуття, PHP продовжує модернізуватися та покращувати свої можливості з кожним роком. У цій останній версії з'явилися покращення, що зроблять наш код елегантнішим, ефективнішим та потужнішим. Як програмісти, ми завжди шукаємо способи написати чистіший та функціональніший код, і ця версія приносить ідеальні інструменти для цього.
Від впровадження нових функцій для масивів до асиметричної видимості властивостей, PHP 8.4 обіцяє спростити наше життя. Давайте розглянемо ці нововведення на прикладах, щоб ви нічого не пропустили.
1. Хуки властивостей: Зникає потреба в геттерах та сеттерах
PHP 8.4 вводить property hooks, які дозволяють налаштувати, як доступати чи змінювати властивість безпосередньо з її визначення. Це усуває необхідність вручну створювати методи get
та set
.
Практичний приклад:
class Usuario {
private string $nombre;
private string $apellido;
public function __construct(string $nombre, string $apellido) {
$this->nombre = $nombre;
$this->apellido = $apellido;
}
public string $nombreCompleto {
get => $this->nombre . ' ' . $this->apellido;
set {
[$this->nombre, $this->apellido] = explode(' ', $value, 2);
}
}
}
$usuario = new Usuario('Juan', 'Pérez');
echo $usuario->nombreCompleto; // Juan Pérez
$usuario->nombreCompleto = 'Luis Gómez';
echo $usuario->nombreCompleto; // Luis Gómez
Що ми досягли? Чистіший і зрозуміліший код для роботи з композитними даними без додаткових методів.
2. Асиметрична видимість: Контролюй, хто може читати і хто може змінювати
Ще однією з найцікавіших можливостей є асиметрична видимість. За допомогою асиметричної видимості ви можете зробити властивість публічною для читання, але приватною чи захищеною для запису. Це дає вам змогу мати більший контроль над вашими даними.
Практичний приклад:
class Producto {
public private(set) float $precio;
public function __construct(float $precio) {
$this->precio = $precio;
}
}
$producto = new Producto(29.99);
echo $producto->precio; // 29.99
$producto->precio = 35.99; // Помилка: Не можна змінювати цю властивість зовні.
Це ідеально підходить для сценаріїв, коли потрібно забезпечити незмінність певних ключових значень.
3. Нові функції для масивів: Більше можливостей, менше коду
Робота з масивами тепер простіша завдяки таким функціям, як array_find_key()
, array_any()
та array_all()
. Вони спрощують виконання типових завдань, таких як пошук ключів чи перевірка умов у масивах.
Функція array_find
Ця функція виглядає так, наче її вже повинно було бути, але вона лише тепер з'явилася. Функція array_find
повертає значення першого елемента масиву, для якого callback повертає true
. Якщо жоден з елементів не задовольняє умови, повертається null
.
$numeros = [1, 2, 3, 4, 5];
$primerPar = array_find($numeros, fn($n) => $n % 2 === 0); // Повертає 2
Функція array_find_key
Схожа на функцію array_find
.
Lo único que si cumple una condición, devolverá la key o clave del primer valor encontrado.
$animales = [
'a' => 'perro',
'b' => 'gato',
'c' => 'vaca',
'd' => 'pato',
'e' => 'ganso',
'f' => 'elefante'
];
$clave = array_find_key($animales, fn($valor) => strlen($valor) > 4);
echo $clave; // 'a'
Функція array_any()
Перевіряє, чи хоча б один елемент задовольняє задану умову.
$numeros = [1, 3, 5, 7, 9];
$hayPar = array_any($numeros, fn($valor) => $valor % 2 === 0);
var_dump($hayPar); // false
Функція array_all()
Перевіряє, чи всі елементи задовольняють умову.
$edades = [25, 30, 35, 40];
$sonMayores = array_all($edades, fn($valor) => $valor > 18);
var_dump($sonMayores); // true
Ці функції не лише корисні, але й роблять наш код більш виразним та легким для читання.
4. Інстанціювання класів без дужок
Це покращення може здатися незначним, але насправді воно є чудовим помічником у підтримці чистоти та зручності коду. Тепер ви можете ланцюжити методи безпосередньо під час інстанціювання класу, без необхідності обертати їх в дужки.
Практичний приклад:
$usuario = new Usuario('Juan', 'Pérez')->actualizarNombre('Luis');
Прощавай, зайві рядки та непотрібні дужки.
5. Покращення в парсері DOM та обрізка мультимовних рядків
Хоча HTML5 існує вже понад 16 років, PHP ніколи не мав належної підтримки для нього. PHP дійсно має \DOMDocument
, який теоретично повинен був би бути сумісним з HTML 4, але вже не є реально сумісним з ним. PHP опублікував новий парсер, який сумісний з HTML5 і при цьому зберігає сумісність з попередніми версіями.
Для тих, хто працює з HTML5, тепер парсер DOM повністю сумісний, що спрощує маніпулювання сучасними HTML-документами.
// Сумісність з HTML 5
$dom = \Dom\HTMLDocument :: createFromString ( $html );
// Сумісність з HTML 4-ish
$oldDom = new \DOMDocument ();
$oldDom -> loadHTML ( $html );
public static function createEmpty(string $encoding = "UTF-8"): HTMLDocument;
public static function createFromFile(string $path, int $options = 0, ?string $override_encoding = null): HTMLDocument;
public static function createFromString(string $source, int $options = 0, ?string $override_encoding = null): HTMLDocument;
Крім того, також були додані функції для обрізки мультимовних рядків, такі як mb_trim()
, що забезпечують правильну обробку рядків, навіть у складних мовах.
Практичний приклад:
$cadena = " ejemplo ";
$cadenaRecortada = mb_trim($cadena); // "ejemplo"
Маленька деталь, яка має велике значення при роботі з текстами.
6. Імпліцитні типи, що приймають значення null (депрецяція)
PHP мав дивну поведінку, коли змінна з типом, що мала значення null за замовчуванням, автоматично ставала null:
function guardar( Book $book = null ) {}
Це поведінка більше не використовується і буде видалена в PHP 9. Тепер рішення полягає в тому, щоб зробити значення типів Book явно null:
function guardar( ?Book $book = null ) {}
Оновлюй PHP та досліджуй ці та інші нововведення!
PHP 8.4 не лише вводить корисні можливості, але й переосмислює, як можна писати більш інтуїтивно зрозумілий та міцний код. Незалежно від того, чи розробляєш API, складні додатки або просто оптимізуєш робочий процес, ці покращення — крок вперед.
Перекладено з: PHP 8.4 : Todas Las Novedades