در ۲۸ نوامبر ۲۰۱۹ نسخه PHP 7.4 منتشر شد و اکنون در همه سرور های میزبان در دسترس است. با وجود این نسخه PHP توسعه دهندگان می توانند انتظاراتی در خوانایی کد، نگهداری و سهولت استفاده داشته باشند. در این مطلب می خواهیم به برخی از ویژگی های جدید، اصلاحات عملکردی و دلایل دیگر به وجود آمدن PHP 7.4 بپردازیم. همچنین به عناوینی با موضوعات PHP 7.4 چه معنایی دارد، چگونه نسخه PHP خود را تغییر دهید، موارد جدید در PHP 7.4 و نیز استهلاک این نسخه ازPHP خواهیم پرداخت، با ما همراه باشید.
PHP 7.4 چه معنا و مفهومی دارد؟
PHP با وجود انتشار جدیدترین نسخه به روز شده خود یعنی PHP 7.4، که از ویژگی های جدیدی برخوردار است، اما همچنان به تکامل خود ادامه می دهد. به طوریکه همانطور که در نسخه های قبلی PHP 7 هم دیده بودیم، عملکرد و سرعت در حال بهبود است. یکی از جالب ترین ویژگی های نسخه جدید، بارگیری مجدد آن است. به کمک ساده سازی خطوط رایج کد، به اجرای اسکریپت با سرعت بیشتر و نیز معرفی توانایی داشتن کدها به صورت سریع تر و مرتب تر کمک می کند.
کسانی که مسئول PHP هستند معمولاً نظرات و درخواست های مخاطبان خود را شنیده و با تمام قدرت به آنها پاسخ داده اند. آنها از ابتدا تا کنون به طور مستمر کد ها را تغییر می دهند تا در میان زبان های برنامه نویسی ظاهر بصری تر و راحت تری داشته باشند.
PHP در بیش از ۷۸٫۹ درصد از کل وب سایت ها استفاده می شود. طبق گفته W3techs، از معروف ترین سایتهایی که از PHP استفاده می کنند، می توان به ویکی پدیا، پینترست و فیس بوک اشاره نمود.
اگر بخواهیم به طور خاص به سایت های وردپرسی که دارای PHP هستند نگاه کنیم، با مقایسه PHP 5 و PHP 7، می توان افزایش دو برابری سرعت را مشاهده کرد. وب سایت های دارای وردپرس با استفاده از آخرین نسخه PHP موجود، قطعاً بیشترین سود را می برند. کاربران میزبان تنها با یک کلیک بر روی یک دکمه می توانند سایت های وردپرس خود را با ویژگی های جدید به صورت فوق العاده ارتقا بخشند.
نمودار استفاده از PHP
اگر به ارقام جالب در این نمودار دقت کنید، خواهید دید که این نمودار واقعیت هایی را در مورد وب سایت هایی که به طور فعال از PHP استفاده می کنند؛ بیان می نماید. آیا ۳۹،۱۹۱،۷۱۴ وب سایت زنده ای که از PHP استفاده می نمایند، برای جلب توجه شما کافی هستند؟ در واقع این رقم، در حال حاضر از PHP استفاده می کنند. به علاوه PHP 7.4 با عملکرد بهتر و بهبود سایر ویژگی های خود، در حال آزمایش نسبت به PHP 7.3 با کیفیت تر می باشد.
نمودار زیر آزمون معیار کلی نسخه های جدید و قدیم PHP را نشان می دهد. برخی از این معیارها شامل سهولت استفاده، سرعت و عملکرد و سایر موارد هستند.
چگونگی تغییر نسخه PHP شما
آماده به روز رسانی هستید؟ به طور حتم Hostinger با این چهار مرحله ساده، کار را مثل همیشه آسان می کند. به طوری که در کمترین زمان ممکن با نسخه جدید و بهبود یافته PHP خود روبرو خواهید شد.
- وارد حساب Hostinger خود شوید و دکمه Home را فشار دهید.
- در صفحه اصلی خود، به قسمت میزبانی بروید و روی نماد مدیریت کلیک کنید.
- در کادر جستجو، پیکربندی PHP را تایپ کنید و روی آن کلیک کنید.
- PHP 7.4 را انتخاب کرده و کلید Save را کلیک کنید.
تبریک می گویم اکنون بهترین و به روزترین نسخه PHP را در دسترس دارید.
همچنین برای بررسی نسخه PHP فعلی، تنها کاری که باید انجام دهید این است که به برگه هاستینگ بروید و پانل سمت چپ را برای نسخه PHP بررسی کنید. اگر چیزی کمتر از ۷٫۴ است، ادامه دهید و آن را به روز کنید.
موارد جدید در PHP 7.4 چیست؟
از سال ۲۰۱۶، PHP 7 بدون وقفه روزرسانی های سالانه خود را منتشر می کند. هر ساله آنها ویژگی های جدید، ابزار ها و امکانات نوشتن کدهای کامل تر را ارائه می دهند که باعث می شود زبان PHP برای افرادی که آن را در وب سایت های خود اجرا می کنند قابل اعتمادتر و کاربر پسندتر باشد.
اکنون بیایید برخی از تغییراتی را که با افزودن PHP 7.4 ایجاد شده اند را از نزدیک بررسی کنیم. برای مشاهده لیست کامل این از تغییرات، ادامه این مطلب را دنبال نمایید.
پیش بارگیری
در این قسمت می خواهیم درباره کدها مواردی را بیان کنیم. در زمان به کار بردن یک چارچوب یا کتابخانه، می بایست پرونده های مرتبط با آن بارگیری شود. این پیش ذخیره کردن زمانی باید انجام شود که شما فریم ورک ها و کتابخانه ها را در OPCache بارگذاری کرده اید. این عمل به سرور اجازه می دهد تا هنگام راه اندازی، فایل های PHP را بارگیری کرده و در حافظه ذخیره کند و سپس برای درخواست های بعدی آن ها را در دسترس قرار دهد که با انجام این عملیات، سرعت کار بیشتر خواهد شد.
پیش بارگیری، توسط این دستورالعمل خاص php.ini اجرا می شود:
اگر پرونده ها و مطالبی که از قبل بار گذاری شده اند دچار تغییرات شوند، در هنگام راه اندازی سرور اجرا می شود. چرا که این موارد همواره در حافظه OPCache باقی خواهند ماند به طوری که در صورت نیاز به راحتی می توان مجدداً آن ها را بارگیری نمود.
گسترش اپراتور در عبارت های آرایه
هنگامی که PHP 5.6 منتشر شد، PHP شروع به پشتیبانی از باز کردن آرگومان (اپراتور گسترش) به صورت لیست نمود. این ویژگی فقط برای توابعی کاربرد داشت که در دسترس بودند. اما اکنون در PHP 7.4، ما می توانیم از این ویژگی در یک عبارت آرایه نیز استفاده کنیم. اکنون از این قابلیت که Argument unpacking نام دارد در مثال زیر استفاده می نماییم:
$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]
از دیگر مثال هایی که می توان در این خصوص زد این است که شما می توانید، آرایه هایی را که توسط یک تابع مستقیماً به یک آرایه جدید بازگردانده می شوند را باز کنید. به این مثال زیر توجه کنید:
function getAnimals(){
return [‘dog’, ‘cat’, ‘elephant’];
}
$num1 = […getAnimals(), ‘lion’, ‘tiger’, ‘giraffe’];
و در نسخه PHP 7.4 نیز به صورت زیر خواهیم داشت:
array(6) {
[۰]=>
string(3) “dog”
[۱]=>
string(3) “cat”
[۲]=>
string(8) “elephant”
[۳]=>
string(4) “lion”
[۴]=>
string(5) “tiger”
[۵]=>
string(7) “giraffe”
}
سایر مزایای PHP 7.4
با وجود این قابلیت های موجود در این نسخه، اپراتورهای spread موجود PHP 7.4 عملکرد بهتری نسبت به array_merge 7.3 دارند. این به این دلیل است که عملگر spread یک ساختار زبان است در حالیکه array_merge یک تابع است. همچنین به دلیل اینکه اپراتور spread از آرایه های لیست شده و قابل پیاده سازی پشتیبانی می کند ولی array_merge فقط از آرایه های دیگر پشتیبانی می کند، این موضوع اتفاق میافتد. بنابراین شما فقط از آرایه های فهرست شده می توانید استفاده کنید زیرا غیر از آن پشتیبانی نمی شوند. یکی دیگر از مزایای بسیار عالی PHP 7.4 حذف array_merge است. به عنوان مثال، بیایید به این ادغام آرایه طولانی در مثال زیر بپردازیم:
$array = [‘banana, ‘orange’];
$array[2] = ‘orange’;
$array[1] = ‘apple’; //shifting
var_dump($array);
// prints
array(3) {
[۰]=>
string(6) “banana”
[۱]=>
string(5) “apple”
[۲]=>
string(6) “orange”
یکی دیگر از مزایای ۷٫۴ php ، استفاده از عملکرد ژنراتور است. یک تابع ژنراتور دقیقاً مانند یک تابع معمولی کار می کند. تابع ژنراتور به همان اندازه که لازم است مقادیر تولید می کند. مثال زیر را بررسی کنید:
function generator() {
for ($i = 3; $i <= 5; $i++) {
yield $i;
}
}
$num1 = [0, 1, 2, …generator()];
منابع ضعیف
PHP 7.4 دارای منابع ضعیف یا Weak Reference است ولی باید توجه نمود که با کلاس WeakRed یا پسوند Weakref اشتباه گرفته نشود. Weak References به برنامه نویس اجازه می دهد تا تمامی اطلاعات را در حافظه پنهان ذخیره و نگهداری نماید تا بدین ترتیب هیچ اطلاعاتی از بین نرود. این موضوع برای اجرای سازه هایی مانند cache بسیار مفید است. مثال زیر را در این خصوص بررسی نمایید:
WeakReference {
/* Methods */
public __construct ( void )
public static create ( object $referent ) : WeakReference
public get ( void ) : ?object
}
پارامترهای متناقض در PHP 7.4
در حال حاضر، 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 5، یک ویژگی وجود داشت که به شما امکان می دهد که هر نوع متغیری را که انتظار می رود به یک تابع یا کلاس منتقل شود، تعیین کنید. اما در نسخه PHP 7.4، شما می توانید در داده های object نیز به طور کامل استفاده کنید. به مثال زیر نگاه کنید که نشان می دهد در نسخه ۷٫۴ جدید ، PHP قادر به پشتیبانی از لیست نوع زیر است:
bool, int, float, string, array, object, iterable, self, parent
any class or interface name
?type // where “type” may be any of the above
توجه داشته باشید که از این قابلیت می توان در کلاس ها استفاده کرد و نیازی به داشتن پارامتر ها و نوع بازگشت ندارد. همچنین توجه داشته باشید که void و callable در آن پشتیبانی نمی شود. دلیل حذف شدن Void این است که چندان مفید نبوده و از نظر معنایی نیز نامشخص می باشد. بیایید چند نمونه دیگر را بررسی کنیم. در زیر یک کلاس برای 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;
در مثال زیر نیز چند نمونه از انواع کلاس ۷٫۴ که اکنون پشتیبانی می کند وجود دارد:
class Example {
public int $scalarType;
protected ClassName $classType;
private ?ClassName $nullableClassType;
// Types are also legal on static properties
public static iterable $staticProp;
// Types can also be used with the “var” notation
var bool $flag;
// Typed properties may have default values (more below)
public string $str = “foo”;
public ?string $nullableStr = null;
// The type applies to all properties in one declaration
public float $x, $y;
// equivalent to:
public float $x;
public float $y;
}
توابع پیکان یا arrow در PHP 7.4
اگر در PHP توابعی ناشناس باشند حتی وقتی فقط عملیات ساده را انجام می دهند، بسیار طولانی هستند. این باعث می شود که خواندن این کدهای طولانی گیج کننده بوده و حتی فهم آن را دشوارتر کند. در زیر برخی از کدهایی را که از PHP 7.3 استفاده می کنند، آورده ایم:
function array_values_from_keys($arr, $keys) {
return array_map(function ($x) use ($arr) { return $arr[$x]; }, $keys);
}
اکنون، نحوه مختصرآن در PHP 7.4 در مثال زیر آمده است:
function array_values_from_keys($arr, $keys) {
return array_map(fn($x) => $arr[$x], $keys);
}
بنابراین، توابع پیکان اکنون این فرم ساده را دارند:
fn(parameter_list) => expr
در زیر می توانید نمونه ای از دو عملکرد $fn1 (7.3) و $fn2 (7.4) را در کنار هم مشاهده کنید. آنها نتیجه یکسانی دارند اما متفاوت به نظر می رسند:
$y = 1;
$fn1 = fn($x) => $x + $y;
$fn2 = function ($x) use ($y)
{
return $x + $y;
};
اگر عملکردهای پیکان تو در تو قرار داشته باشند، به صورت زیر در خواهد آمد:
$z = 1;
$fn = fn($x) => fn($y) => $x * $y + $z;
در واقع این عملکرد در نسخه ۷٫۴ ، قابل انجام است و این در حالیست که این کار در ۷٫۳ قابل انجام نبود. نحو عملکرد پیکان توابع مختلفی از جمله متغیرها، مقادیر پیش فرض، انواع پارامتر و بازگشت و همچنین عبور و بازگشت از طریق مرجع را امکان پذیر می کند، در حالی که ظاهری کوتاه و قابل خواندن دارند. در زیر همه توابع پیکان معتبر موجود قرار دارد:
fn(array $x) => $x;
fn(): int => $x;
fn($x = 42) => $x;
fn(&$x) => $x;
fn&($x) => $x;
fn($x, …$rest) => $rest;
نکته ای که باید به آن توجه داشت این است که توابع پیکان کمترین تقدم را دارند. مثال زیر را ببینید:
fn($x) => $x + $y
// is
fn($x) => ($x + $y)
// not
(fn($x) => $x) + $y
استهلاک ها در PHP 7.4
در نسخه ۷٫۴ php استهلاک هایی نیز اتفاق افتاده است. لیست زیر خلاصه ای از توابع هدف گرفته شده برای استهلاک در PHP 7.4 است که توضیحات دقیق تری را می توانید در اینجا بیابید:
- real type
- Magic quotes legacy
- کاربرد ( ) array_key_exists با مقادیر
- فیلتر FILTER_SANITIZE_MAGIC_QUOTES
- ()mb_strrpos
- ()implode
- جدایی $this از non-static closures
- تابع ()hebrevc
- تابع ()convert_cyr_string
- تابع ()money_format
- تابع ()restore_include_path
- تابع ()ezmlm_hash
تغییر اولویت عملگرها در PHP 7.4
در حال حاضر تقدم اپراتورهای “.” ، “+” و “-” همه برابر هستند. هر ترکیبی از این عملگرها به سادگی از چپ به راست حل خواهد شد. بیایید به این کد در PHP 7.3 نگاهی بیندازیم:
echo “sum: ” . $a + $b;
// would be evaluated left-to-right
echo (“sum: ” . $a) + $b;
// could also look like this
در PHP 7.4، عملگر های “+” و “-” بر “.” اولویت دارند، بنابراین جمع و تفریق همیشه اول انجام می شود. این موضوع به صورت زیر است:
echo “sum: ” . $a + $b;
// would be executed as if the code were as follows.
echo “sum :” . ($a + $b);
غیر از این تغییر اولویت در عملگرها، در PHP 7.4 استفاده از پرانتز نیز پیشنهاد شده است. این موضوع باعث بروز مشکلاتی شده که منتظر رای نهایی در نسخه PHP 8 باید شد. در حقیقت PHP 7.4 پیشنهاد می کند که قابلیت چپ گرایی حذف شود و به جای آن باید از پرانتز استفاده شود. به مثال زیر نگاهی بیندازید:
return $a == 1 ? ‘one’
: $a == 2 ? ‘two’
: $a == 3 ? ‘three’
: $a == 4 ? ‘four’
: ‘other’;
این موضوع در بیشتر زبان های دیگر اینگونه تفسیر می شود:
return $a == 1 ? ‘one’
: ($a == 2 ? ‘two’
: ($a == 3 ? ‘three’
: ($a == 4 ? ‘four’
: ‘other’)))
اما این در حالی است که در PHP، به صورت زیر تفسیر می شود:
return ((($a == 1 ? ‘one’
: $a == 2) ? ‘two’
: $a == 3) ? ‘three’
: $a == 4) ? ‘four’
: ‘other’;
سخن آخر
با توجه به موارد بیان شده می توان نتیجه گرفت که نسخه PHP 7.4 دارای ویژگی های جدید و بهبود هایی در کیفیت PHP شده است که وب سایت های وردپرسی در صورت استفاده از آن به طور قطع از این پیشرفت ها بهره مند خواهند شد. همچنین کاربران آنها می توانند هنگام اجرای PHP 7.4 در مقایسه با نسخه های قبلی انتظار زمان اجرای سریع تر و استفاده از حافظه کمتری را داشته باشند. بنابراین با وجود این نسخه سرعت و کیفیت کار بیشتر خواهد شد. شما می توانید نظرات خود را با ما به اشتراک بگذارید.
مطالب مرتبط
دیدگاهتان را بنویسید