مهاجرت به php7 از نون شب براتون واجب تر نیست اما بالاخره مهم که هست 🙂 امروز یا امشب (نمیدونم کی میخونینش پس…) میخوایم بار و بندیلمونو برداریم بریم سمت php7 اما اگه آماده نیستید مساله ای نیست چون اولش کلی دلیل میاریم که چرا باید بریم اون سمتی.
خب بزارین با یه داستان یا همچین چیزی بحث رو شروع کنیم…
چند وقت پیش داشتم روی یه پروژه ی تحت وب به عنوان فریلنسر کار می کردم. بک اندش رو با PHP نوشتم در کل بر اساس استاندارد های php7 کد ها رو نوشتم اما روی هاست با PHP5.3 اجرا می شد.
یکی از مشکلاتی که برخوردیم بحث سرعت پردازش بود. با توجه به نوع پروژه (حسابداری تحت وب | صندوقداری) بود، نیاز بود که الگوریتم های محاسباتی داشته باشه و وقتی روی پروداکشن داشتیم با یه سری داده های تستی برای کنترل و آزمایش نرم افزار کار می کردیم متوجه شدیم که سرعت اجرای نرم افزار خیلی کنده.
حتی بعضی وقتا (خصوصا قسمتی که الگوریتم محاسبات روی تعداد زیادی Entry اپلای می شد) سایت time out میداد که مشکلات زیادی درست میکرد.
اولش با بالا برن execution_time توی تنظیمات php.ini هاست دایرکت ادمین تونستیم مقداری قضیه رو بهتر کنیم اما هنوز مسأله سر جاش بود.
راه حل؟ اولش اومدم یکبار الگوریتم رو بررسی کردم تا ببینم میشه کاری کرد که سریعتر اجرا بشه. دیدم چیزی در نیومد.
رفتم سراغ تنظیمات دایرکت ادمین و دیدم که گزینه ای داره برای انتخاب ورژن PHP، ورژن php رو روی 7.3 قرار دادم (الان که مقاله روی مینویسم تا 7.4.5 هم اومده که یه سری باگ فیکس و مشکلات امنیتی بوده اما هنوز شرکت روی سرورش نصب نکرده). نتیجه فوق العاده بود.
سرعت اجرا تا حدود 50% بیشتر شد. یعنی دو برابر!
این قضیه موقع انتشار ورژن 7 گفته شد و تاکید شد که حتما به این ورژن سوییچ کنید. (البته در نظر داشته باشید که یه سری چیز ها هم deprecate شدن و شما باید کدتون رو ریفکتور کنین).
حالا بریم یه سری به تغییرات php7 نسبت به php5 بزنیم.
برخی از ویژگی های php7
Performance بیشتر
یکی از مهم ترین تغییرات این نسخه در مورد پروفرمنس بیشتر این نسخه هیچ شکی نیست و میتونید یه سرچی بزنید و خودتون ببینید که واقعا چقدر نسبت به ورژن قبلی پیشرفت داشته. دلیلش هم استفاده از ورژن جدید Zend Engine هست. اگر نمیدونید Zend Engine چیه اینجا کلیک کنید.
یعنی همین که شما از interpretter جدید تر php استفاده می کنید باعث میشه سرعت سایت یا وب اپلیکیشنتون بره بالا.
As per Zend Technologies, the performance improvement is huge!! Just upgrading to PHP 7 gives enormous performance upgrades. Hence, PHP 7 is often termed PHPNG (PHP – Next Gen) taking the performance of your code to a whole new level.
وب سایت geeksforgeeks
Scalar Type Hints
یعنی شما میتونید به آرگومان های تابع یا متودتون نوع بدین و بگین حتما باید از این نوع باشن. اگر خط زیر رو اول فایلتون بنویسید strict_type فعال میشه و اگر نوع داده ی ورودی با نوع داده ی آرگومان تابع شما همخوانی نداشته باشه خطا میده.
بزارین یه مثال بزنیم. فرض کنید میخوایم یه تابع داشته باشیم برای جمع کردن دو تا عدد صحیح.
<?php declare(strict_types = 1); function sum(int $x, int $y) { return $x + $y; } $sum = sum("10","20"); ?>
از اونجایی که من تعیین کردم که php حساس و سخت گیر باشه در نتیجه به من خطا میده. چون من گفتم ارگومان های a , b باید integer باشن اما خودم رشته بهش دادم. پس ارور میده. در واقع خطایی که بهتون نشون میده چیزی شبیه اینه:
Uncaught TypeError: Argument 1 passed to sum() must be of the type int, string given
تعریف نوع داده ی بازگشتی
اگر با php کار کردین میدونید که توی نسخه ی های قدیمی تر امکان تعریف یک نوع داده بازگشتی برای یه تابع یا متد وجود نداشت و این گاها میتونست یه سری دردسر هایی برای برنامه نویس ها ایجاد بکنه. خوشبختانه توی نسخه ی جدید این امکان وجود داره که نوع داده ای که از یه تابع بر میگرده (return value) رو تعیین کنیم.
به عنوان مثال توی تابع زیر سن رو (یه عد صحیح) میگیریم و چک میکنیم اگر 18 یا بالاتر بود نتیحه رو true بر میگردونیم در غیر اینصورت false برگشت داده میشه:
<?php function isValid(int $age):bool{ if($age >= 18){ return true; } else{ return false; } } ?>
در واقع شما میتونید از چهار نوع داده bool, int, string, and float برای return کردن استفاده کنید.
پشتیبانی از اعداد صحیح 64 bit
مدیریت خطا (Error handling)
PHP 7 changes how most errors are reported by PHP. Instead of reporting errors through the traditional error reporting mechanism used by PHP 5, most errors are now reported by throwing Error exceptions.
php.net
طبق گفته ی سایت رسمی خود php؛ شیوه ی گزارش خیلی از خطاها تغییر کرده اند. بجای گزارش ارور ها به شکل قدیمی که تو نسخه های php5 و… میدیدیم؛ بیشتر خطا ها توسط Exception ها میان بالا (به عبارتی).
در این مورد اینجا هم توضیحات خوبی داده شده.
Anonymous Class
کلاس های Anonymous یا ناشناس کلاس هایی هستند که اسم ندارند. تو php7 این امکان وجود داره که با استفاده از کلمه کلیدی new class یه کلاس ناشناس بسازیم.
برای مثال و فهمیدم عمیق این موضوع مقاله ی زیر رو پیشنهاد میکنم:
https://blog.eduonix.com/web-programming-tutorials/learn-working-anonymous-classes-php-7/
عملگر های جدید
عملگر < = > یا space ship operator یه عملگر جدید توی php7 هست و قبلا توی php نداشتیمش. از اونجایی که یه چیز جدیده (جدید به نسبت نسخه های قبل) یکم بیشتر توضیح میدم. بقول خودشون کارش مقایسه ی ترکیبیه. حالا پرسش ما اینه که اساسا combined comparison یا مقایسه ی ترکیبی یعنی چی و چه کاری برای ما انجام میده؟!
نحوه ی کار به این شکله:
اگر هر مقادیر دو سمت (یعنی عملوند ها) با هم برابر بودند 0 بر میگردونه
اگر مقدار سمت چپ بزرگتر بود 1 رو بر میگردونه
اگر مقدار سمت راست بزرگتر بود 1- بر میگردونه
مثال:
<?php // Comparing Integers echo 1 <=> 1; // outputs 0 echo 3 <=> 4; // outputs -1 echo 4 <=> 3; // outputs 1 // String Comparison echo "a" <=> "a"; // outputs 0 echo "m" <=> "y"; // outputs -1 echo "y" <=> "c"; // outputs 1 ?>
در آخر اینم بگم که یه سری چیز ها بطور کلی از php7 حذف شده اند. مثلا یه سری تگ شبیه asp که میشه یه چیزی شبیه <% و غیره که میتونید اینجا ببیندشون.
منابع:
- php.net
- www.bestinterviewquestion.com/blog/what-is-the-difference-between-php5-and-php7
- www.freelancinggig.com/blog/2018/04/23/major-differences-php-5-php-7
- www.geeksforgeeks.org/php-5-vs-php-7
اگر دوست داشتین میتونید از دسته بندی برنامه نویسی چیز های بیشتری در این باره بخونید یا آموزش هایی رو ببینید.
اولین باشید که نظر می دهید