php
З випуском PHP 8.4 ми спостерігаємо справжні цікаві нововведення та вдосконалення. У цій статті я розгляну основні нововведення PHP 8.4 і надам практичні приклади, які допоможуть вам максимально ефективно використовувати ці нові функції.
1. Хуки властивостей
Однією з найяскравіших новинок у PHP 8.4 є введення хуків властивостей. Ці хуки дозволяють визначати власну поведінку при доступі до властивостей класу або їх зміні. Тепер ви можете додавати логіку до властивостей без необхідності використовувати магічні методи, такі як __get
та __set
.
class Product {
private float $price;
public function __get(string $name) {
if ($name === 'price') {
return $this->price;
}
throw new Exception("Property $name does not exist");
}
public function __set(string $name, $value) {
if ($name === 'price') {
if ($value < 0) {
throw new Exception("Price cannot be negative");
}
$this->price = $value;
} else {
throw new Exception("Property $name does not exist");
}
}
}
$product = new Product();
$product->price = 100.50; // Valid
echo $product->price; // Outputs: 100.5
2. Асиметрична видимість
PHP 8.4 вводить асиметричну видимість для властивостей, що дозволяє визначати різні рівні доступу для геттерів і сеттерів. Наприклад, властивість може мати публічний геттер і приватний сеттер.
class Product {
private float $price;
public function __get(string $name) {
if ($name === 'price') {
return $this->price;
}
throw new Exception("Property $name does not exist");
}
public function __set(string $name, $value) {
if ($name === 'price') {
if ($value < 0) {
throw new Exception("Price cannot be negative");
}
$this->price = $value;
} else {
throw new Exception("Property $name does not exist");
}
}
}
$product = new Product();
$product->price = 100.50; // Valid
echo $product->price; // Outputs: 100.5
3. Оновлений DOM API
DOM API був модернізований у PHP 8.4, наближаючи його до сучасних стандартів веб-розробки. Це оновлення спрощує маніпуляцію з XML та HTML документами.
$dom = new DOMDocument();
$dom->loadHTML('
Hello, World!
');
$element = $dom->getElementById('test');
if ($element) {
$element->nodeValue = 'Hello, PHP 8.4!';
}
echo $dom->saveHTML(); // Outputs:
Hello, PHP 8.4!
5. Депрекації
З кожною новою версією PHP деякі старі функції оголошуються застарілими, щоб прокласти шлях для кращих практик. PHP 8.4 вводить такі основні депрекації:
Імпліцитні Nullable типи
Якщо ви використовували nullable типи без явного їх визначення, час оновити ваш код. PHP 8.4 вимагає явного оголошення nullable типів за допомогою ?
.
// Deprecated
function process(string $data = null) {
// ...
}
// Updated
function process(?string $data) {
// ...
}
Сесії через GET/POST
Сесії, ініціалізовані через GET/POST, були депрековані для підвищення безпеки. Замість цього використовуйте cookies або заголовки для обробки сесій.
6. Виклик методів без дужок
PHP 8.4 дозволяє викликати методи без дужок, коли не передаються аргументи. Це робить синтаксис чистішим і більш інтуїтивно зрозумілим.
class MyClass {
public function greet() {
return "Hello, PHP 8.4!";
}
}
$instance = new MyClass();
echo $instance->greet; // Outputs: Hello, PHP 8.4!
7. Специфічні підкласи для драйверів PDO
Щоб покращити типову безпеку та краще використовувати особливості конкретних баз даних, PHP 8.4 вводить специфічні підкласи для драйверів PDO. Ці підкласи надають методи та властивості, які є унікальними для використовуваного драйвера бази даних.
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
if ($pdo instanceof PDO\MySQL) {
echo $pdo->getAttribute(PDO::ATTR_CLIENT_VERSION); // Outputs MySQL client version
}
php
## Нові функції масивів
PHP 8.4 вводить кілька нових функцій `array_*()`, щоб робота з масивами стала ще більш універсальною:
`array_find()`: Знаходить перший елемент, який задовольняє умови зворотного виклику (callback).
`array_find_key()`: Знаходить перший ключ, який задовольняє умови зворотного виклику.
`array_any()`: Перевіряє, чи хоча б один елемент задовольняє умови зворотного виклику.
`array_all()`: Перевіряє, чи всі елементи задовольняють умови зворотного виклику.
// arrayfind()
$data = [1, 2, 3, 4, 5];
$result = arrayfind($data, fn($value) => $value > 3);
echo $result; // Виведе: 4
// arrayfindkey()
$data = ['a' => 1, 'b' => 2, 'c' => 3];
$key = arrayfindkey($data, fn($key, $value) => $value === 2);
echo $key; // Виведе: b
// arrayany()
$data = [1, 2, 3, 4, 5];
$result = arrayany($data, fn($value) => $value > 4);
var_export($result); // Виведе: true
// arrayall()
$data = [2, 4, 6, 8];
$result = arrayall($data, fn($value) => $value % 2 === 0);
var_export($result); // Виведе: true
```
Заключні думки
PHP 8.4 є кроком уперед у розвитку PHP, роблячи його більш надійним, зручним для розробників і відповідним сучасним практикам програмування. Впровадивши ці зміни, ви зможете писати чистіший, ефективніший і безпечніший код.
Будучи у світі PHP вже понад 20 років, я щиро захоплений цими вдосконаленнями. Чи ви досвідчений розробник, чи тільки починаєте, PHP 8.4 має щось цікаве для кожного. Оновлюйте свої проекти та починайте досліджувати можливості вже сьогодні!
Перекладено з: Exploring PHP 8.4: What’s New and How to Use It