معرفی ویژگی های جدید php 7.4

معرفی ویژگی های جدید php 7.4
Avatar
نویسنده: دارا رستگار
یکشنبه 27 آذر 1390
مطالعه: ۹ دقیقه ۰ نظر ۱۰۷۴ بازدید

PHP همچنان در حال تکامل و به روز رسانی است تا ویژگی ها و عملکرد خود را بهبود و ارتقا بخشد. php 7.4 جدید ترین نسخه می باشد که به تازگی ارائه شده است و عملکرد و سرعت آن به طرز قابل توجهی بهتر شده است. مسئولین php با شنیدن و دریافت نظرات مخاطبان خود تغییراتی در php ایجاد کرده اند تا آن را هرچه بیشتر به نسخه ای ایده آل و بدون مشکل برای مخاطبان تبدیل کنند. در این متن به بررسی و معرفی کامل نسخه جدید php و هاست می پردازیم تا با ویژگی ها و عملکرد آن آشنا شویم.

 php 7.4

این نسخه جدید php 7.4 که در تاریخ ۲۸ نوامبر ۲۰۱۹ یعنی به تازگی منتشر شده است، توجه همه را به خود جلب کرده است و اکنون در تمام سرورهای Hostinger در دسترس می باشد. با وجود php 7.4 افراد می توانند شاهد پیشرفت در خوانا بودن کد، نگهداری و سهولت استفاده باشند. در واقع ویژگی های php 7.4 باعث شده تا از آن استفاده شود. این php در واقع با ساده سازی کدها باعث اجرای سریعتر برنامه می شود و عملکرد سیستم را بهبود می بخشد. این نسخه جدید php آخرین ورژن نبوده و تغییرات همیشه ادامه دارد تا بتوان ویژگی های آن را هر چه بیشتر ارتقا داد.

افزایش سرعت وردپرس با php 7.4
مشخصات پی اچ پی 7.4

کاربرد php

PHP در بیش از ۷۸.۹ درصد از وب سایت های موجود مورد استفاده قرار می گیرد. برخی از سایت های. معروف که همه با آنها آشنایی دارند و از php استفاده می کنند ویکی پدیا، پینترست و فیس بوک می باشند. در حال حاضر ۳۹۱۹۱۷۱۴ سایت از php استفاده می کنند و این آمار به خوبی کارآمد بودن آن را ثابت می کند.

تست php 7.4
benchmark تست

ویژگی های php 7.4

در واقع از php نسخه جدید برای بهبود بخشیدن به سرعت استفاده می کنند. اگر دو سایت را که از ورژن قبلی php و php 7.4 استفاده می کنند را با یکدیگر مقایسه کنید متوجه افزایش حدود دو برابری سرعت آن خواهید شد. از سال ۲۰۱۶ php7 هر ساله نسخه جدیدی ارائه داده است که در آن سعی کرده کیفیت، سهولت در استفاده، عملکرد و سرعت را ارتقا ببخشد. استفاده ساده تر برای کاربران و بهبود کیفیت باعث شده تا رضایت افراد بسیار بیشتر شود و در حال حاضر ورژن ۷.۳ در حال ساخت است تا ویژگی ها و کیفیت بالاتری را به کاربران ارائه دهد.

پیش ذخیره

در این بخش کمی درباره کدها و ذخیره کردن آنها با یکدیگر صحبت خواهیم کرد. هنگام استفاده از یک کتابخانه باید با هر درخواست پرونده مربوطه و در واقع فایل مرتبط بارگذاری شود. شما با پیش ذخیره و در واقع بارگذاری فایل ها از قبل می توانید مطالب و فایل را در OPCache بارگذاری کنید. این کار باعث می شود که سرور بتواند فایل ها و پرونده های php را بارگیری کند و در حافظه خود ذخیره کرده تا در صورت نیاز و درخواست آنها را در دسترس قرار دهد. با این فرایند به طور قطع سرعت کار افزایش می یابد.
بارگذاری از قبل یا همان پیش بارگذاری (preloading) طی یک دستورالعمل php.ini اجرا می شود. در صورتی که منبع فایل ها و پرونده هایی که از قبل بارگذاری شده اند تغییر کند سرور مجددا راه اندازی خواهد شد و پرونده هایی که از قبل بارگذاری شده اند برای همیشه در حافظه OPCache باقی می مانند و این امکان همیشه وجود دارد که در صورت نیاز بتوان مجدد آنها را بارگذاری نمود.

افزودن spread به آرایه ها در php 7.4

در نسخه قدیمی php 5.6 یک قابلیتی که Argument unpacking نام داشت به شما این امکان را می داد تا آرایه ها را به صورت لیستی از آرگومان ها (Argumente) باز نماید. این قابلیت در نسخه قدیمی تنها برای ارگومان های توابعی بود که در دسترس بودند اما در نسخه جدید php 7.4 این قابلیت به آرایه ها نیز تعمیم داده شد. به این شکل برای انجام کار می توانید مانند مثال زیر از سه نقطه قبل آن استفاده کنید:

$animals = ['dog', 'cat'];
$animalkingdom = ['lion', 'elephant', ...$animals, 'giraffe'];
// [‘lion’, ‘elephant’, ‘dog’, ‘cat’, ‘giraffe’];

در این جا مثال دیگری وجود دارد که به آن نیز می پردازیم:

$num1 = [1, 2, 3];
$num2 = [...$num1]; // [1, 2, 3]
$num3 = [0, ...$num1]; // [0, 1, 2, 3]
$num4 = array(...$num1, ...$num2, 111); // [1, 2, 3, 1, 2, 3, 111]
$num5 = [...$num1, ...$num1]; // [1, 2, 3, 1, 2, 3]

شما می توانید از ان در یک عملکرد نیز استفاده کنید برای درک بهتر لطفا به مثال زیر دقت کنید:

function getNum() {
  return ['a', 'b'];
}
$num6 = [...getNum(), 'c']; // ['a', 'b', 'c']
 
$num7 = [...new NumIterator(['a', 'b', 'c'])]; // ['a', 'b', 'c']
 
function arrGen() {
    for($i = 11; $i < 15; $i++) {
        yield $i;
    }
}
$num8 = [...arrGen()]; // [11, 12, 13, 14]

همچنین علاوه بر این موارد شما می توانید مانند مثال زیر آرایه ها را توسط یک عملگر unpack نمایید:

function getAnimals(){
 return ['dog', 'cat', 'elephant'];
}
$num1 = [...getAnimals(), 'lion', 'tiger', 'giraffe'];

و در php7 داریم:

array(6) {
 [0]=>
 string(3) "dog"
 [1]=>
 string(3) "cat"
 [2]=>
 string(8) "elephant"
 [3]=>
 string(4) "lion"
 [4]=>
 string(5) "tiger"
 [5]=>
 string(7) "giraffe"
}

مزیت های php 7.4

به این ترتیب php7.4 عملکرد بهتری خواهند داشت زیرا اپراتور spread یک ساختار زبانی است (language structure ) و array-merge یک تابع می باشد که همین موضوع باعث سریعتر شدن آن خواهد بود. باید به این نکته توجه داشته باشید که تنها می توانید از آرایه های فهرست شده استفاده نمایید زیرا آرایه های دیگر پشتیبانی نمی شوند و به شما خطا نمایش داده خواهد شد. یکی دیگر از مزیت های php 7.4 حذف آرایه mergeمی باشد. برای درک بهتر به مثال زیر نگاه کنید:

$array = [‘banana, ‘orange’];
$array[2] = ‘orange’;
$array[1] = ‘apple’; //shifting
var_dump($array); 
// prints 
array(3) {
 [0]=>
 string(6) "banana"
 [1]=>
 string(5) "apple"
 [2]=>
 string(6) "orange"

یکی دیگر از مزیت های این نسخه از php استفاده از اپراتور و عملگر Generator است. این اپراتور مانند دیگر عملگرها می باشد اما تنها به میزانی که نیاز است بازده دارد. به مثال زیر دقت کنید:

function generator() {
 for ($i = 3; $i <= 5; $i++) {
 yield $i;
 }
}
$num1 = [0, 1, 2, ...generator()];

Weak reference

PHP 7.4 دارای weak reference است که برخی آن را با wealred یا weakref اشتباه می گیرند. weakreference این اجازه را به برنامه نویس می دهد که هر اطلاعاتی را در حافظه پنهان نگهداری کند و به این ترتیب هیچ اطلاعاتی از بین نخواهد رفت. این موضوع بسیار مهم و کاربردی است. به مثال زیر نگاه کنید:

WeakReference {
/* Methods */
public __construct ( void )
public static create ( object $referent ) : WeakReference
public get ( void ) : ?object
}

پارامترهای متناقض

PHP از انواع پارامترها استفاده می کند و این بدان معنا خواهد بود که اگر متدی دارای پارامتر x باشد پارامتر زیرپایه آن نیز باید از نوع X باشد و در واقع نباید این دو نسبت به یکدیگر از نوع متفاوتی باشند. اما در php 7.4 این امکان مهیا شده است تا پارامترها با یکدیگر متفاوت بوده و در واقع تضاد داشته باشند. در اینجا مثالی از هر ‌دو حالت مشاهده می کنیم. ابتدا مثالی از نمونه اول :

interface Factory {
 function make(): object;
}
class UserFactory implements Factory {
 function make(): User;
}

اما در حالت دیگر مشاهده می کنیم :

interface Concatable {
 function concat(Iterator $input); 
}
class Collection implements Concatable {
 // accepts all iterables, not just Iterator
 function concat(iterable $input) {/* . . . */}
}

Typed properties در php 7.4

همانطور که می دانید در php قابلیتی به نام Type hint وجود دارد که به افراد این امکان را می دهد تا نوع متغیرهای ارسال شده به آرگومان یک تابع را مشخص نماییم. شما می توانید از این قابلیت در نسخه ی php 7.4 در داده های object و همچنین خصوصیات کلاس ها نیز به طور کامل استفاده کنید. به مثال زیر نگاه کنید:

bool, int, float, string, array, object, iterable, self, parent
any class or interface name
?type // where "type" may be any of the above

توجه داشته باشید که تنها parent type می تواند در کلاس ها مورد استفاده قرار گیرد و نیازی به استفاده از آنها در پارامترها نخواهد بود. در اینجا کلاسی نوشته شده با php 7.3 را مشاهده می کنید:

class User {
    /** @var int $id */
    private $id;
    /** @var string $name */
    private $name;
 
    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
 
    public function getId(): int {
        return $this->id;
    }
    public function setId(int $id): void {
        $this->id = $id;
    }
 
    public function getName(): string {
        return $this->name;
    }
    public function setName(string $name): void {
        $this->name = $name;
    }
}

اما در php 7.4 بدون اینکه آسیبی به امنیت سیستم وارد شود کلاس را می توان به سادگی نمونه پایین بنویسید:

class User {
    public int $id;
    public string $name;
 
    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
}

توابع arrow در php 7.4

توابعی که در واقع ناشناس هستند در php حتی اگر مربوط به عملیات ساده باشند طولانی هستند و علت آن نیز وارد کردن تعداد زیاد متغیرها به صورت دستی است. این موضوع باعث می شود تا خواندن کدها و درک آنها نیز بسیار سخت تر شود. این مشکل تا حدودی در php 7.4 برطرف شده است و در این حالت این توابع مختصر تر نوشته می شوند. به مثال زیر نگاه کنید:

function array_values_from_keys($arr, $keys) {
    return array_map(fn($x) => $arr[$x], $keys);
}

بنابراین توابع arrow این شکل ساده را دارند:

fn(parameter_list) => expr

اگر توابع arrow تو در تو باشند به صورت زیر می توان آنها را نوشت:

$z = 1;
$fn = fn($x) => fn($y) => $x * $y + $z;

این عملیات که مشاهده کردید تنها در php 7.4 انجام می شود و پیش از آن در 7.3 نمی توانستید که آن را انجام دهید.

اولویت های عملگر ها

در حال حاضر اولویت های عملگرهای ‘.’ “+” و “‘“ یکسان است. هر ترکیبی از این عملگرها به سادگی از چپ به راست خوانده و اجرا می شود. اما در php 7.4 دو عملگر + و – بر “.” اولویت دارند بنابراین جمع و تفریق در ابتدا انجام خواهد شد.به مثال زیر نگاه کنید:

echo "sum: " . $a + $b; 
// would be executed as if the code were as follows.
echo "sum :" . ($a + $b);

علاوه بر تمام موارد و ویژگی های ذکر شده برای php 7.4 وجود اپراتور مستقل سه گانه (left associative ternary operator ) استفاده از چپ گرایی بودن برای برنامه نویسان و همچنین استفاده از پرانتز را پیشنهاد کرده است که این موضوع مشکلاتی به همراه خواهد داشت.

چگونه ورژن php را به 7.4 ارتقا دهیم ؟

  1. وارد سایت پارس پک شده
  2. از سرویس خود یک نسخه پشتیبان تهیه کنید
  3. از قسمت تیکت ها، ارسال تیک را انتخاب کنید
  4. سرویس خود را انتخاب کنید
  5. از پشتیان درخواست کنید ورژن php شما را به نسخه 7.4 ارتقا دهد