რელიზი!
PHP 8.0 — PHP ენის დიდი განახლება.
ის შეიცავს ბევრ ახალ შესაძლებლობას და ოპტიმიზაციებს, მათ შორის დასახელებული არგუმენტები, union type, ატრიბუტები, თვისებების გამარტივებული განსაზღვრა კონსტრუქტორში, გამოსახულება match, ოპერატორი nullsafe, JIT და გაუმჯობესებები ტიპის სისტემაში, შეცდომების დამუშავება და თანმიმდევრულობა.

დასახელებული არგუმენტები RFC დოკუმენტაცია

PHP 7
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
PHP 8
htmlspecialchars($string, double_encode: false);
  • მიუთითეთ მხოლოდ საჭირო პარამეტრები, გამოტოვეთ არასავალდებულო.
  • არგუმენტების თანმიმდევრობა არ არის მნიშვნელოვანი, არგუმენტები თვითდოკუმენტირებადია.

Attributes RFC დოკუმენტაცია

PHP 7
class PostsController
{
/**
* @Route("/api/posts/{id}", methods={"GET"})
*/
public function get($id) { /* ... */ }
}
PHP 8
class PostsController
{
#[
Route("/api/posts/{id}", methods: ["GET"])]
public function
get($id) { /* ... */ }
}

PHPDoc ანოტაციების ნაცვლად, შეგიძლიათ გამოიყენოთ სტრუქტურული მეტამონაცემები ნატიური PHP სინტაქსით.

თვისებების განახლება კონსტრუქტორში RFC დოკუმენტაცია

PHP 7
class Point {
public
float $x;
public
float $y;
public
float $z;

public function
__construct(
float $x = 0.0,
float $y = 0.0,
float $z = 0.0
) {
$this->x = $x;
$this->y = $y;
$this->z = $z;
}
}
PHP 8
class Point {
public function
__construct(
public
float $x = 0.0,
public
float $y = 0.0,
public
float $z = 0.0,
) {}
}

ნაკლები შაბლონური კოდი თვისებების განსაზღვრისა და ინიციალიზაციისთვის.

Union types RFC დოკუმენტაცია

PHP 7
class Number {
/** @var int|float */
private $number;

/**
* @param float|int $number
*/
public function __construct($number) {
$this->number = $number;
}
}

new
Number('NaN'); // შეცდომები არაა
PHP 8
class Number {
public function
__construct(
private
int|float $number
) {}
}

new
Number('NaN'); // TypeError

PHPDoc ანოტაციების ნაცვლად, გაერთიანებული ტიპებისთვის შეგიძლიათ გამოიყენოთ განცხადება union type, რომლებიც მოწმდება შესრულების დროს.

გამოსახულება Match RFC დოკუმენტაცია

PHP 7
switch (8.0) {
case
'8.0':
$result = "ოოო არა!";
break;
case
8.0:
$result = "ის, რასაც მე ველოდი";
break;
}
echo
$result;
//> ოოო არა!
PHP 8
echo match (8.0) {
'8.0' => "Oh no!",
8.0 => "ის, რასაც მე ველოდი",
};
//> ის, რასაც მე ველოდი

ახალი გამოსახულება match, switch ოპერატორის მსგავსია შემდეგი მახასიათებლებით:

  • Match — ეს არის გამოსახულება, მისი შედეგი შეიძლება შენახული იყოს ცვლადში ან დაბრუნდეს.
  • პირობა match მხარს უჭერერს მხოლოდ ერთსტრიქონიან გამოსახულებებს, რომლებიც არ საჭიროებენ break; კონტროლის კონსტრუქციას.
  • გამოსახულება match იყენებს მკაცრ შედარებას.

ოპერატორი Nullsafe RFC

PHP 7
$country = null;

if (
$session !== null) {
$user = $session->user;

if (
$user !== null) {
$address = $user->getAddress();

if (
$address !== null) {
$country = $address->country;
}
}
}
PHP 8
$country = $session?->user?->getAddress()?->country;

null-ის შემოწმების ნაცვლად, შეგიძლიათ გამოიყენოთ გამოძახების თანმიმდევრობა ახალ Nullsafe ოპერატორით. როდესაც ერთ-ერთი ელემენტი თანმიმდევრობაში აბრუნებს null-ს, შესრულება ჩერდება და მთელი თანმიმდევრობა აბრუნებს null-ს.

სტრიქონებისა და რიცხვების გაუმჯობესებული შედარება RFC

PHP 7
0 == 'foobar' // true
PHP 8
0 == 'foobar' // false

PHP 8 რიცხვითი სტრიქონის შედარებისას იყენებს რიცხვების შედარებას. წინააღმდეგ შემთხვევაში, რიცხვი გარდაიქმნება სტრიქონად და გამოიყენება სტრიქონების შედარება.

ტიპების თანმიმდევრულობის შეცდომები ჩაშენებული ფუნქციებისთვის RFC

PHP 7
strlen([]); // Warning: strlen() expects parameter 1 to be string, array given

array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0
PHP 8
strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given

array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0

შიდა ფუნქციების უმეტესობა უკვე გამორიცხავს Error გამონაკლისს, თუ შეცდომა მოხდა პარამეტრის შემოწმებისას.

კომპილაცია Just-In-Time

PHP 8 წარმოგიდგენთ JIT-კომპილაციის ორ მექანიზმს. JIT ტრასირება, მათგან ყველაზე პერსპექტიულია, სინთეზურ ბენჩმარკზე აჩვენებს მუშაობის გაუმჯობესებას დაახლოებით 3-ჯერ და 1.5-2-ჯერ ზოგიერთ დიდ ხანს მომუშავე აპლიკაციებში. აპლიკაციის სტანდარტული წარმადობა ერთ და იგივე დონეზეა PHP 7.4-თან.

JIT-ის შედარებითი წვლილი PHP 8-ის წარმადობაში

Just-In-Time compilation

გაუმჯობესებები ტიპის სისტემაში და შეცდომების დამუშავება

  • ტიპის უფრო მკაცრი შემოწმება არითმეტიკული/ბიტიური ოპერატორებისთვის RFC
  • აბსტრაქტული თვისებების მეთოდების შემოწმება RFC
  • ჯადოსნური მეთოდების სწორი სიგნატურები RFC
  • ძრავის გაფრთხილებების ხელახალი კლასიფიკაცია RFC
  • ფატალური შეცდომა, როდესაც მეთოდის სიგნატურა შეუთავსებელია RFC
  • @ ოპერატორი აღარ აჩუმებს ფატალურ შეცდომებს.
  • მემკვიდრეობა private მეთოდებთან RFC
  • ახალი ტიპი mixed RFC
  • დაბრუნების ტიპი static RFC
  • ტიპები სტანდარტული ფუნქციებისთვის Email თემა
  • გაუმჭვირვალე ობიექტები რესურსების ნაცვლად Curl, Gd, Sockets, OpenSSL, XMLWriter, and XML გაფართოებებისთვის

სინტაქსის სხვა გაუმჯობესება

  • მძიმე დაშვებულია პარამეტრების სიის ბოლოს RFC და use დამოკლების სიაში RFC
  • ბლოკი catch ცვლადის მითითების გარეშე RFC
  • ცვლადის სინტაქსის ცვლილება RFC
  • სახელების სივრცეში სახელები განიხილება, როგორც ერთიამნი ტოკენი RFC
  • გამოსახულება Throw RFC
  • დამატება ::class ობიექტებისთვის RFC

ახალი კლასები, ინტერფეისები და ფუნქციები

To Top