Досліджуємо PHP 8.4: Що нового та як це використовувати

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

pic

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 = array
find($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 = array
any($data, fn($value) => $value > 4);
var_export($result); // Виведе: true

// arrayall()
$data = [2, 4, 6, 8];
$result = array
all($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

Leave a Reply

Your email address will not be published. Required fields are marked *