پی اچ پی 8.4 با فانکشن های جدید برای کار با آرایه ها و معرفی هوک برای ویژگی های کلاس منتشر شد. همچنین یک آپدیت سینتکس برای نمونه سازی کلاس داشته است که جذابیت این ورژن را بیشتر می کند.
فانکشن های جدید پی اچ پی 8.4 برای کار با آرایه
ورژن پی اچ پی 8.4 شامل فاکشن های جدید برای جستجو در آرایه ها می شود که به شرح زیر هستند
- array_find
- array_find_key
- array_any
- array_all
فانکشن array_find در php 8.4
فانکشن array_find
روی تمام آیتم های ارایه حرکت میکند و مقدار اولین آیتمی که خروجی کالبک آن true
باشد را بر میگرداند:
<?php
$array = [
'one' => 'reza',
'two' => 'hamid',
'tree' => 'mohammad',
];
$result = array_find($array, function(string $value) {
return strlen($value) > 4;
});
// $result: hamid
فانکشن array_find_key در پی اچ پی 8.4
فانکشن array_find_key
روی تمام آیتم های ارایه حرکت میکند و کلید اولین آیتمی که خروجی کالبک آن true
باشد را بر می گرداند، در صورتی که شرط کالبک برای هیچکدام از آیتم ها درست نباشد مقدار null
برگردانده می شود.
<?php
$array = [
'one' => 'reza',
'two' => 'hamid',
'tree' => 'mohammad',
];
$result = array_find_key($array, function($value, $key) {
return $value == 'reza';
});
// $result: one
فانکشن array_any و array_all در پی اچ پی 8.4
فانکش array_any
تمام آیتم های آرایه را بررسی می کند و اگر شرط کالبک هر کدوم از آیتم ها true
باشد مقدار true
بر میگردد، در واقع یک شرط را برای آیتم های آرایه بررسی می کند و اگر حداقل یک شرط برقرار باشد true
برمی گرداند.
<?php
$array = [
'one' => 'reza',
'two' => 'hamid',
'tree' => 'mohammad',
];
$hasMohammad = array_any($array, function($value) {
return $value == 'mohammad';
});
// $hasMohammad: true
فانکشن array_all
نیز یک شرط را برای تمام آیتم های آرایه بررسی می کند ولی برعکس فانکشن array_any
باید شرط برای تمام آیتم ها برقرار باشد تا true
برگردد اگر حتی یک مورد شرط برقرار نباشد false
بر میگردد.
<?php
$array = [
'one' => 'reza',
'two' => 'hamid',
'tree' => 'mohammad',
];
$isValid = array_all($array, function($value) {
return strlen($value) <= 5;
});
// $isValid: false
ویژگی Property Hook در PHP 8.4
پراپرتی هوک ها امکان تغییر رفتار ویژگی را هنگام خواندن و نوشتن محیا می کند، این قابلیت دو نوع روش نوشتن تک خطی و چند خطی را پشتیبانی می کند:
<?php
class Employee {
private boolean $changed = false;
public function __construct(
private string $firstName,
private string $lastName;
){}
public string $fullName {
// بازنویسی رفتار خواندن مقدار
// به صورت تک خطی نوشتیم
get => $this->firstName . ' ' . $this->lastName;
// باز نویسی رفتار نوشتن
// به صورت چند خطی نوشتیم
set {
[$this->firstName, $this->lastName] = explode(' ', $value, 2);
$this->changed = true;
}
}
}
ایجاد کلاس بدون استفاده از پرانتز در php 8.4
یکی از ویژگی های جدید این ورژن ایجاد کلاس بدون قرار دادن کلاس در پرانتز است. خودم از این ویژگی خیلی خوشم اومد :) امیداوارم از این نوع تغییرات در آینده داشته باشیم.
در ورژن های قبلی مجبور بودیم برای زنجیر کردن متدها حتما کلاس ایجاد شده رو در پرانتز قرار بدیم و بعد متدها را بنویسیم به این شکل:
<?php
(new Request())->withMethod('GET')->withUri('/hello-world');
در نسخه 8.4 پرانتز ها دیگر اجباری نیست و به این شکل قابل نوشتن است:
<?php
$request = new Request()->withMethod('GET')->withUri('/hello-world');
تغییرات جزیی بیشتری در این ورژن داشتیم که به مرور مقاله به روز رسانی می شود.
موفق باشید.