چند روز پیش php آخرین نسخه رو قبل از php ۸ منتشر کرد که خیلی ها منتظرش بودن. بله php 7.4! ????

قطعا یکی از بهترین و خوشحال کننده ترین نسخه هایی هست که تا به امروز منتشر شده که کیفیت و سرعت کدنویسی رو بالا میبره و همچنین با ویژگی جدیدش سرعت اجرای کدها بصورت جشمگیری بالا میره. تو این پست سعی میکنم مهمترین مواردی که تو این نسخه اضافه شده رو بیارم.

<br>
  • Arrow Functions - برای تمیز تر نوشتن توابع تک خطی
  • Typed Properties - برای Hinting
  • Spread Operator - کپی کردن آرایه
  • Preloading - برای بهبود سرعت اجرای کدها
  • Null Coalescing assignment operator - یک میانبر برای Null coalescing
  • Numeric literal separator - خوانایی اعداد

Arrow Function

تو نسخه های قبلی ما Anonymous Function یا Closure ها رو داشتیم که کمی نوشتنش سخت بود و برای دسترسی به متغیر های بیرون حتما باید از use استفاده میشد. تو نسخه جدید با معرفی Arrow functions شما میتونید توابع رو ساده تر و خوانا تر و تو یک خط بنویسید.

anonymous function

$factor = 10;
$calc = function($num) use($factor){
	return $num * $factor;
};

arrow function

کد بالا رو میتونید تو یک خط به این شکل بنویسید:

$factor = 10;
$calc = fn($num) => $num * $factor;

دقت کنید که Arrow function

  • حتما باید با عبارت کلیدی fn آغاز بشه.
  • نمیتونید return استفاده کنید
  • نمیتونه مولتی لاین باشه
  • نمیتونه بیشتر از یک عبارت (expression) داشته باشه

مثال دیگه:

array_map(function (User $user) { 
    return $user->id; 
}, $users)

arrow function:

array_map(fn (User $user) => $user->id, $users)

wow ????

Typed Properties

تو نسخه‌ی جدید میتونید نوع متغیرهای یه کلاس یا Property ها رو مشخص کنید. قطعا داشتن Type میتونه تاثیر بسزایی تو کیفیت و حتی سرعت کد نویسی داشته باشه، کد رو خوانا تر، قابل فهم برای دیگران و قابل اعتماد تر کنه.

<?php
class User {
    public int $id;
    public ?string $nullableStr = null;
}
?>

تو این مثال ما مجبور میکنیم که نو داده ای $id حتما باید از نوع integer و $name حتما ‍string باشه.

انواع تایپ که میتونید مشخص کنید:

  • bool
  • int
  • float
  • string
  • array
  • iterable
  • object
  • ? (nullable)
  • self & parent
  • Classes & interfaces

Spread Operator (Unpacking inside arrays )

Spread Operator یکی دیگه از ویژگی های جذابیه که به این نسخه اضافه شده و مثل جاوا اسکریپت با سه نقطه(...) شروع میشه . قبل از اینکه این ویژگی اضافه بشه شما برای ادغام دو آرایه میبایست از array_merge استفاده میکردید که یک تابع بود و محدودیت هایی داشت چو فقط روی آرایه ها کار میکرد اما Spread operator سریع تره و قابلیت های بیشتری داره ????

به مثال ها توجه کنید:

$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];

$arrayA = [1, 2, 3];
$arrayB = [4, 5];
$result = [0, ...$arrayA, ...$arrayB, 6 ,7];

// [0, 1, 2, 3, 4, 5, 6, 7]

شما حتی میتونید از Spread Operator به این شکل استفاده کنید و از خروجی یه تابع مستقیما کپی کنید: ????

function buildArray(){
	return ['red', 'green', 'blue'];
}
$arr1 = [...buildArray(), 'pink', 'violet', 'yellow'];

Preloading

این قابلیت که یکی از پر بحث ترین ویژگی های اضافه شده تو این نسخه هست میتونه سرعت اجرای کدها رو بسیار سریع تر کنه. حالا که بحث سرعت شد جالبه بدونید که php 7 (نه 7.4) حدودا 400٪ از php 5 سریع تره (قابل توجه دوستانی که اپدیت نمیکنن!).

نحوه کار Preloading اینطوره که بجای اینکه تو هر ریکوئست بیاد و فایل های مورد نیاز رو لینک کنه، شما میتونید لیست فایل ها رو بدید (مثلا لیست فایل های فریمورکتون) و موقع Startup سرور یک بار این فایل ها رو براتون تو مموری بارگذاری میکنه و باعث میشه همیشه این فیل ها قابل دسترسی باشند و با این روش سرعت اجرای کد بسیار بالا میره.

Null Coalescing assignment operator

اپراتور (??)Coalesce که تو php 7 معرفی شد برای این بود که مشابه Ternary operator استفاده بشه برای مواقعی که میخواین ببینین آیا متغیر تعریف شده، مقدار داره یا خیر و اگر نداره کار دیگه ای انجام بده که به این شکل استفاده میشد:

$data['username'] = $data['username'] ?? 'guest';

حالا اگر به عقب برگردیم قبل از php 7 باید اینکارو میکردیم:

$data['username'] = (isset($data['username']) ? $data['username'] : 'guest');

حالا تو نسخه جدید میتونید حتی کوتاه تر، یعنی به این شکل بنویسید:

$data['username'] ??= 'guest';

Numeric literal separator

یکی دیگه از ویژگی های پرکاربر دیگه که اضافه شده اینه که میتونید برای خوانایی اعداد از _ استفاده کنید:

$unformattedNumber = 107925284.88;

$formattedNumber = 107_925_284.88;

سخن پایانی

من اینجا فقط به چند تا از مهمترین ویژگی های نسخه جدید اشاره کردم و چندین مورد رو هم نگفتم! میتونید در موردش بیشتر بخونید و بنویسید. PHP مسیر خوبی رو پیش گرفته و داره قابلیت های خوبی ارائه میده. php حالا یه زبان قابل اعتماد، قابل پیش بینی، خوانا، سریع، منعطف و برنامه نویس پسند شده. امیدوارم که از این پست استفاده کرده باشید و از ورژن جدید لذت ببرید. لطفا اگر مشکلی یا ایرادی دیدید اطلاع بدید. ????

<br> منابع:

https://www.php.net/index.php#id2019-11-28-1
<br>
https://www.php.net/manual/en/migration74.new-features.php#migration74.new-features.core.arrow-functions
<br>
https://kinsta.com/blog/php-7-4/
<br>
https://codular.com/php-7-4-null-coalescing-assignment-operator
<br>
https://stitcher.io/blog/new-in-php-74#null-coalescing-assignment-operator-rfc

آخرین ویرایش: 29-11-2019 ???? 12:24، توسط رضا رمضانپور