در این مقاله سعی داریم ویژگی های جدید PHP7 را برسی نماییم .

1-بهبود سرعت 

PHP7 نسبت به ورژن های قبلی خود مموری کمتری استفاده میکند و همچنین پرفورمنس بالاتری را نیز دارد

این ورژن سرعتی معادل دو برابر سرعت ورژن قبلی خود دارد.

2- اکسپشن هندلینگ پیشرفته تر

ویژگی دیگری که در PHP7 وجود دارد مدیریت و پردازش خطا و استثناهای پیشرفته تر نسبت به ورژن های قبلی خود است.

علاوه بر پردازش خطا در PHP 7 میتونید خطاهای موتور PHP را نیز پردازش نمایید

به قطعه کد زیر توجه نمایید  

<?php
function call_bar_method($foo) {
$foo->bar()
}

call_bar_method(null); // Fatal error: Call to a member function method() on a non-object

?>​


با قطعه کد زیر میتوانید اینگونه خطاها را هندل کنید .

<?php
try {
call_bar_method(null);

} catch (EngineException $e) {

echo $e->getMessage()
}
?>​


3-امکان تعریف datatype ها

PHP ذاتا یک زبان داینامیک تایپ میباشد و هیچ نیازی به تعریف دیتاتایپ ها درآن وجود ندارد ، اما در PHP 7 میتوانید مانند زبانهای استاتیک تایپ جاوا ، ++C و... دیتاتایپ های خود را صریح بیان نمایید.

 
<?php
function get_total(int $a,int $b){

return $a + $b;

}

echo get_total(5,3); // 8

echo get_total("A",32); //Fatal error: Uncaught TypeError: Argument 1 passed to get_total() must be of the type integer, string given
?>​


همچنین در PHP 7میتوانید return type متد های خود را مشخص نمایید ، مانند void,int,flot ,....
<?php

class User
{
    private $first_name;

    private $last_name;

    private $age;

    public function getFirstName(): string{
        return $this->first_name;
    }


    public function setFirstName(string $first_name): void{
        $this->first_name = $first_name;
    }


    public function getLastName(): string{
        return $this->last_name;
    }


    public function setLastName(string $last_name): void{
        $this->last_name = $last_name;
    }

    public function getFullName(): string{
        return $this->first_name . " " . $this->last_name;
    }


    public function setAge(int $age): void{
        $this->age = $age;
    }


    public function getAge(): int{
        return $this->age;
    }

}

$user = new User();
$user->setFirstName("John");
$user->setLastName("Doe");
$user->setAge(27);
echo $user->getFullName(); //John Doe
echo $user->getAge();//27
?>


4- ایمپورت گروهی namespace ها

در PHP5.6 برنامه نویس باید تک تک namespace ها را مجزا ایمپورت میکرد ولی در PHP 7 میتوانید مانند قطعه کد زیر namespace های خود را گروهی ایمپورت نمایید
​<?php
//before php7
use App\Models\User;
use App\Models\Product;
use App\Models\Article;

//after php7+
use App\Models\{User,Product,Article,anything};

?>​
 

5-توابع CSPRNG 
در PHP7 دو تابع به نام های random_bytes و random_int به منظور تولید رشته ها و اعداد تصادفی امن و رمزگذاری شده معرفی شده است.
random_bytes   یک رشته دلخواه از بایت های تصادفی رمزنگاری را ایجاد می کند.

<?php
   $bytes = random_bytes(5);
   print(bin2hex($bytes));
?>

تابع random_int نیز یک عدد صحیح ریاضی تصادفی را ایجاد میکند ، 2 مقدار min , max را از ورودی خوانده و یک عدد صحیح تصادفی امن رمزنگاری را در محدوده min تا max را تولید میکند .

<?php
print(random_int(100, 999));
?>


6 - بهبود عملکرد Closure ها

تا قبل از ورژن 7 ، Closure ها در PHP به صورت زیر مدیریت میشدند.

<?php
   class Product {
      private $price = 200;
   }

  
   $getValue = function() {
      return $this->price;
   };

   // Bind a clousure
   $value = $getValue->bindTo(new Product, 'Product'); 

   print($value());
?>

اما بعد از PHP7 بسیار راحتتر و با کدهای کمتری clousure ها مدیریت میشوند.

<?php
   class Product {
      private $price = 320;
   }

   // PHP 7+ code
   $value = function() {
      return $this->price;
   };

   print($value->call(new Product)); //320
?>