გამოვიდა PHP 8.5-ის ახალი სტაბილური გამოცემის ოფიციალური ანონსი. ახალი გამოცემა მოიცავს უამრავ სიახლეს, ასევე შემოთავაზებულ ცვლილებებს, რომლებიც არღვევს თავსებადობას.
PHP 8.5-ში არსებული ძირითადი გაუმჯობესებები (1, 2, 3):
- დამატებულია „|>“ (pipe) ოპერატორი, რომელიც ერთიდან მეორე ფუნქციაში შედეგის გადაცემის საშუალებას იძლევა შედეგთან რამდენიმე ოპერაციის თანმიმდევრულად გამოყენებისთვის, რაც ამარტივებს რამდენიმე გამოძახების ჯაჭვში დაჯგუფებას. თუ ფუნქცია მოითხოვს არგუმენტებს, მათ ნაცვლად შესაძლებელია მრავალწერტილის „…“ გამოყენება, ხოლო თუ ფუნქციაში მხოლოდ ერთი არგუმენტის გადაცემაა საჭირო, შესაძლებელია ავტომატური დაკავშირების გამოყენება პირველი პარამეტრისთვის. მაგალითად, გამოსახულება
$output = $input |> trim(…) |> fn (string $string) => str_replace(‘ ‘, ‘-‘, $string) |> fn (string $string) => str_replace([‘.’, ‘/’, ‘…’], ”, $string) |> strtolower(…);
ექვივალენტურია
```
$temp = trim($input);
$temp = str_replace(' ', '-', $temp);
$temp = str_replace(['.', '/', '…'], '', $temp);
$output = strtolower($temp);
ან
```
$output = strtolower( str_replace([‘.’, ‘/’, ‘…’], ”, str_replace(‘ ‘, ‘-‘, trim($input) ) ) );
* დანერგილია არგუმენტების სიის მეშვეობით უშუალოდ ობიექტზე გადაცემის შესაძლებლობა, clone() მეთოდში ახალი ობიექტის შექმნის ნაცვლად.
```
public function withTitle(string $title): self
{
return clone($this, [
'title' => $title,
]);
}
- დამატებულია ატრიბუტი „#[NoDiscard]“, რომელიც შეიძლება გამოყენებულ იქნას ფუნქციებისთვის, რომელთა დაბრუნებული მნიშვნელობის იგნორირება არ შეიძლება. თუ გამომძახებელი მხარე უგულებელყოფს დაბრუნებულ მნიშვნელობას, გენერირებული იქნება კომპილატორის გაფრთხილება. გასაუქმებლად შესაძლებელია void ტიპზე მიყვანა.
#[NoDiscard(“you must use this return value.”)] function foo(): string { return ‘hi’; }
foo(); // გაფრთხილება გენერირდება (void) foo(); // Ok $string = foo(); // Ok
* ნებადართულია დახურვების (closures) და პირველი კლასის ფუნქციების ბმულების (first-class callables) გამოყენება ატრიბუტებში, სადაც შესაძლებელია ბმულით განსაზღვრული ფუნქციის გამოძახების შედეგის გამოყენება. მაგალითად, ახლა შესაძლებელია დახურვის გადაცემა ატრიბუტში, რომელიც განსაზღვრულია კონსტანტის საფუძველზე. ატრიბუტების მნიშვნელობად გამოყენებული დახურვები უნდა გამოცხადდეს „static“ მოდიფიკატორით და არ უნდა გამოიყენონ გარე ცვლადები „use“ ოპერატორის მეშვეობით.
```
#[SkipDiscovery(static function (Container $container): bool {
return ! $container->get(Application::class) instanceof ConsoleApplication;
})]
- შეცდომების უფრო კომფორტული გამართვისთვის debugging რეჟიმში დამატებულია ფუნქციების გამოძახების შესრულების ტრასირება (backtrace).
- დამატებულია ფუნქციები array_first() და array_last(), რომლებიც იძლევიან მასივის პირველი და ბოლო ელემენტების მიღების საშუალებას. მაგალითად, ნაცვლად
$first = $array[array_key_first($array)] ?? null;
ახლა შესაძლებელია დაწერა
```
$first = array_first($array);
- დამატებულია URI პარსერი, რომელიც უზრუნველყოფს სრულფასოვან API-ს URI-ებთან მუშაობისთვის. პარსერი დანერგილია uriparser და lexbor ბიბლიოთეკების გამოყენებით.
use Uri\Rfc3986\Uri;
$uri = new Uri(‘https://opennet.me/64290‘);
$uri->getHost(); // opennet.me $uri->getScheme(); // https://
* შემოთავაზებულია ატრიბუტი „#[DelayedTargetValidation]“, რომლის გამოსაყენებლად საჭიროა ატრიბუტების, როგორიცაა „#[Override]“, შემოწმების გადადება შესრულების მომენტამდე.
```
#[DelayedTargetValidation]
#[Override]
public const NAME = 'Child';
- დამატებულია ფუნქციები get_error_handler() და get_exception_handler() შეცდომებისა და გამონაკლისების დამუშავების მიმდინარე ფუნქციების მისაღებად.
- Curl მოდულში დანერგილია ფუნქცია curl_share_init_persistent(), რომელიც შესაძლებლობას იძლევა შეიქმნას მუდმივად ხელმისაწვდომი გაზიარებული მონაცემები მოთხოვნების შესასრულებლად.
- Exif მოდულში დამატებულია HEIF და HEIC მეტამონაცემების განსაზღვრისა და ამოღების მხარდაჭერა.
- პროდუქტიულობის გაუმჯობესებები: დანერგილია ტიპების უფრო მკაცრი სახით მოყვანა (მაგალითად, „(integer)“ და არა „(int)“); ოპტიმიზებულია „`“ სიმბოლოს დამუშავება shell_exec() ბრძანების შესრულებისთვის; ოპტიმიზებულია ციკლების შესრულება; ოპტიმიზებულია შედარების ოპერაციების რაოდენობა switch case ოპერატორის დამუშავებისას; ოპტიმიზებულია null-თან მიმართვა array_key_exists() ფუნქციის გამოძახების ნაცვლად.
ini-ფაილებში გამოჩნდა ახალი ოფცია „disabled_classes“.
- ოფიციალური ანონსი არქივში
- OpenNews: PHP გადადის BSD-3 ლიცენზიაზე, რომელიც თავსებადია GPL-თან
- OpenNews: გამოქვეყნდა PHP-ის მუშაობის შედეგების ყოველწლიური მიმოხილვა
- OpenNews: PHP 8.4-ის ახალი სტაბილური გამოცემა
- OpenNews: Glibc-ში აღმოჩენილი დაუცველობა, რომელიც PHP სერვერის ავარიის გამოწვევის საშუალებას იძლევა
- OpenNews: წარმოდგენილია PXP-ის ახალი განშტოება, რომელიც PHP-ის ალტერნატიულ განშტოებას ავითარებს