ایجاد: ۱۹:۴۵ ۱۳۹۵/۵/۱
»
زبان PHP یکی از پرطرفدارترین زبانهای دنیاست و مثل هر زبان برنامهنویسی دیگری، سازندگان و مشارکتکنندگان در آن، سعی در ارتقاء و بهبود آن دارند.
جالب اینجاست که در اکثر نرمافزارها، نسخهی جدید معمولا باعث میشود کمیسنگینتر شود و میزان RAM موردنیاز برای اجرای آن بیشتر شود اما PHP نسخه 7 کاملا برعکس است!
در تستهای متعددی که شده و نتایجش در وب به وفور یافت میشود، مشخص است که از نظر میزان مصرف رم و سرعت اجرا، PHP7 نه تنها از نسخههای قبلی خود به صورت چشمگیری سریعتر است بلکه از سایر مفسرهای php مانند HHVM که توسط فیسبوک در سال 2010 معرفی شد نیز در مجموع سریعتر است. این اینفوگرافیک از سایت zend را ببینید:
مهمترین تفاوت و مزیت PHP7 همان است که در بالا اشاره شد. این مزیت بزرگ قطعا شما را واردار میکند که به سمت PHP7 بیایید. علاوه بر آن، برخی موارد قدیمی و منسوخ شده (مانند توابع آغاز شونده با _mysql یا ereg و همچنین توابع مرتبط با magic quote و ...) در PHP7 حذف شدهاند و چند مورد جدید نیز به آن اضافه شده است.
کسانی که خواهان لیست کامل تغییرات هستند، مستندات کامل آن را میتوانند در این آدرس مطالعه کنند.
در این مطلب به چند نمونه از موارد جدید PHP7 اشاره میشود:
در PHP7 امکان تعریف آرایه به صورت define فراهم شده است و البته در PHP نسخه 5.6 به بعد امکان تعریف آرایه به صورت ثابت هم فراهم شده بود:
const appDirectory = ['lib', 'bin']; // php 5.6+
define('appDirectory', ['lib', 'bin']); // php 7+
اپراتور جدید و پرکاربرد <=>
در PHP7 به این صورت عمل میکند که اگر متغیر سمت چپ بزرگتر از متغیر سمت راست آن باشد، 1 و در صورت تساوی 0 و در غیر اینصورت منفییک برمیگرداند. این اپراتور در توابعی همچون array_filter و usort و ... در کم شدن حجم شما موثر خواهد بود.
همچنین اپراتور جدید ??
نیز به شما کمک میکند که از زحمت چککردن وجود یک متغیر خلاص شوید!
$name = $_GET['name'] ?? 'khali';
// خط بالا معادل کد زیر در نسخه ماقبل هفت پیاچپی است
if(isset($_GET['name']))
$name = $_GET['name'];
else
$name = 'khali';
// که قابلیت چندبار استفاده در یک عبارت محاسباتی را نیز داراست
$var = $a ?? $b ?? $c ?? $default;
در زبان پیاچپی علاوه بر آرایه، میتوانستیم یک شئ از یک کلاس مشخص را سریالایز کنیم و به صورت یک رشته (String) درآوریم. با این کار نام کلاس و پراپرتیهای مختص آن شئ به صورت یک رشته ذخیره میشد. اما یک مشکل امنیتی این بود که در زمان unserialize کردن، ممکن بود رشته مربوطه که از دیتابیس بازخوانی شده، دستکاری غیرمجاز شده باشد و در زمان آنسریالاز، به شئای از یک کلاس دیگر تبدیل شود و فاجعهای به بار آورد.
در PHP 7 این امکان اضافه شده که در زمان آنسریالایز، معین کنید که خروجی الزاما باید شئای از فلان کلاس باشد.
به دلیل شیوع استفاده از کاراکترهای اموجی و اسمایلی (رنج بالای یونیکد)، کار با آنها در PHP 7 راحتتر شده است. برای دسترسی به کاراکترهای یونیکد در PHP7 به سادگی میتوانید کدی شبیه \u{260E}
بنویسید.
یکی از تغییرات خوب PHP7 این است که میتوان ورودی و خروجی موردانتظار یک فانکشن را مشخص کرد. شبیه بسیاری از زبانهای برنامهنویسی دیگر. البته این امر اختیاری است لذا کدهای قدیمی شما هیچ مشکلی از این لحاظ با PHP7 نخواهند داشت.
در زمان تعریف یک تابع، ابتدا کلید واژه function و سپس نام تابع، سپس ورودیهای آن در بین دو پرانتز ذکر میشد. حال قبل از تعریف ورودی میتوانید نوع آن را ذکر کنید. همچنین قبل از تعریف کد مربوط به فانککشن در آکولاد، میتوانید از علامت کالن (:
) و سپس ذکر نوع خروجی استفاده کنید:
function mul(int $a, int $b){return $a*$b;} // تعریف نوع ورودی تابع
function sum($a, $b):int{return $a+$b;} // تعریف نوع خروجی تابع
در صورتی که میخواهید برنامه نسبت به موارد فوق حساس باشد، میتوانید عبارت
declare(strict_types=1);
را در ابتدای کد خود قرار دهید.
نوعهای مجاز عبارتند از: int, string, bool, float, array
.