آشنایی با خصوصیات php7

Image تحقیقات

آشنایی با خصوصیات php7

تیم توسعه پی‎اچ‎پی به تازگی نسخه جدیدی از زبان برنامه نویسی PHP را عرضه کرده‎ است که تا زمان نگارش این مطلب، این نسخه، تنها بصورت آزمایشی جهت بررسی و گزارش ایراد در اختیار برنامه‎نویسان قرار گرفته است. این نسخه جدید که با نام PHP٧ معرفی شده است، بعد از آخرین نسخه رسمی PHP، یعنی ۵.۶ منتشر شده است. البته در ابتدا خبرها حاکی از تصمیم تیم پی‎اچ‎پی مبنی بر انتشار نسخه ۵.۷ بود تا پلی باشد میان کاربران این زبان برنامه‎نویسی با آخرین تغییرات و رویکردهای نسخه جدید، اما این تصمیم هیچگاه عملی نشد.

کارشناسان واحد طراحی و توسعه‌ هاست ایران، با انجام آزمایش‌ها و بررسی‌های گوناگون بر روی نسخه هفتم PHP، مهم‌ترین تغییرات و ویژگی‌های جدید این زبان برنامه‎نویسی را استخراج کرده‌اند که این مطلب به نتایج آن می‌پردازد. لازم به ذکر است آخرین نسخه آزمایشی PHP٧ از وب سایت Zend قابل دریافت است.

 

تغییرات عمده PHP٧ را می‌توان به صورت زیر دسته بندی کرد:

  1. سرعت بیشتر و کارایی بالاتر
  2. حذف موارد از رده خارج نسخه‌های پیشین
  3. عملگرهای جدید
  4. مرتب‎سازی و یک دست نمودن متغیرها و تخصیص مقدار به آن
  5. نمایش بهتر خطا و Exception و مدیریت کارآمدتر آن‌ها با استفاده از Engine Exception
  6. ویژگی‌های جدید زبانی
  7. نوع‎گذاری قوی (strong type scalars)؛ قابلیت مشخص نمودن نوع پارامترهای یک تابع و مقدار برگشتی از آن

 

سرعت بیشتر و کارایی بالاتر

سرعت و کارایی یکی از مهم‌ترین دلایلی است که می‌توان برای ارتقا سرورها به PHP٧ بیان کرد، بر اساس نمودارهای ارایه شده، به طور متوسط، سرعت اجرای یک فایل در PHP٧ دست کم دوبرابر php٥.٦ است.

PHP٧ می‌تواند تعداد دوبرابر بیشتر درخواست (request) در ثانیه اجرا کند؛ یعنی بهبودی ۱۰۰ درصدی در بسیاری از موارد. برای مثال، زمانی که PHPNG  (نام هسته جدید PHP در نسخه ۷ است که تیم Zend نام آن را به اختصار PHPNG گذاشته‎اند.) منتشر شد، صفحه خانه سایت وردپرس نیازمند اجرای ۹.۴ میلیارد دستورالعمل از سوی پردازنده بود، در حالی که با PHPNG این میزان به ۲.۲ میلیارد تقلیل یافت – چیزی نزدیک به ۷۲% کاهش!

آشنایی با خصوصیات php7

آشنایی با خصوصیات php7

واحد طراحی و توسعه‌هاست ایران با انجام آزمایش‌هایی به بررسی دقیق تر سرعت در PHP٧ پرداخته است. در نمودارهای زیر که نتایج حاصل از این آزمایش‌ها را نشان می‌دهد، یک قطعه کد بصورت همزمان در PHP٧ و PHP٥.٦.٤ اجرا شده است و میانگین زمان اجرای این کد گویای عملکرد ارتقا یافته PHP٧ نسبت به نسخه قبلی PHP، یعنی ۵.۶ است.

 

آزمایش Instantiation

دریافت ۱۰۰ هزار رکورد از MySQL با استفاده از PDO و Object-Mapping هر رکورد در یک foreach ١٠٠ هزار تایی

آشنایی با php7

آشنایی با php7

 

آزمایش Iteration

اجرای یک loop برای یک آرایه صدهزارتایی و اعمال عمل ضرب برای هر عضو آرایه

آشنایی با خصوصیات php7

آشنایی با خصوصیات php7

آزمایش Database (MySQL) SELECT Operation

SELECT صد هزار رکورد از دیتابیسی با اطلاعات واقعی، و اجرای یک loop صدهزارتایی برای کل آرایه

ویژگی های php7

ویژگی های php7

حذف موارد از رده خارج

PHP مواردی را که در نسخه‌های پیشین خود از رده خارج اعلام کرده بود، رسماً در این نسخه حذف کرده است؛ این بدان معنا است که درصورت استفاده از آن‌ها در PHP٧ با خطا روبرو خواهید شد:

 

حذف ماژول‌های ereg و mysql

علی رغم تمام هشدارهای چندسال اخیر تیم توسعه PHP مبنی بر ضعف‌های جدی ماژول mysql، کماکان برنامه نویسان علاقه زیادی به استفاده از این ماژول دارند اما خبر بد برای این دسته از برنامه نویسان، آن است که بالاخره در این نسخه از پی اچ پی ماژول mysql حذف شده است. همچنین ماژول ereg به دلیل وجود جایگزینی به نام PCRE (مجموعه توابعی که با preg_ آغاز می‌شوند) در نسخه‌های اخیر چندان مورد استفاده قرار نمی‌گرفت، البته به نظر نمی‌رسد حذف این ماژول برنامه نویسان را با مشکل جدی روبرو سازد.

حذف عملگر new برای reference کردن یک شی

آموزش php7

آموزش php7

حذف گروهی از تگ‌ها به استثنا تگ

آموزش کامل php7

در حالی که در این کد ابتدا مقدار  [٠]vars$ تفسیر می‌شود و سپس مقدار آن به عنوان یک عضو از شی SampleClass مورد ارزیابی قرار می‌گیرد. به این دلیل که شی SampleClass یک عضو با نام member دارد، اجرای نهایی خروجی “PHP Is Way Faster” را صادر می‌کند. خوشبختانه این مشکل در PHP٧ حل شده است و تفسیر متغیرها و عبارت متغیر-متغیری منطقی‎تر و بر اساس استاندارد کلی چپ-به-راست صورت می‌گیرد، یعنی در عبارت:

آموزش php7

آموزش php7

ابتدا $obj->$vars و سپس اولین جز با شاخص ۰ از خروجی این عبارت مورد ارزیابی قرار می‌گیرد. برای حل این مساله، توصیه می‌شود کد خود را با “}” و “{“به روز کنید، یعنی:

php7

php7

البته این تمام ماجرا نیست، تغییرات دیگری هم در ساختار زبانی و دستوری شکل گرفته است، برای مثال کد زیر در PHP٧ کار می‌کند، ولی در نسخه‌های قبلی با خطا روبرو می‌شد:

ویژگی های php7

ویژگی های php7

مدل جدیدی برای Exception

EngineException کار دریافت خطاها و مدیریت آن‌ها را راحت کرده است. از این پس می‌توان با دریافت خطاهای fatal و recoverable fatal اقداماتی نظیر نمایش، ثبت و بازیابی را در مورد آن‌ها انجام داد. البته EngineException به گونه ای پیاده سازی شده است تا با کدهای قدیمی‎تر هم سازگار باشد، اما در مواردی این سازگاری وجود ندارد. کد زیر را در نظر بگیرید:

آموزش کامل php7

آموزش کامل php7

در صورتی که کد بالا در نسخه‌های قبلی PHP اجرا شود، با نمایش ERROR، پردازش قطع شده و تابعی که به set_error_handler() داده شده بود، فراخوانده می‌شد؛ اما در PHP٧ این کد ERROR نشان داده نمی‌شود و به جای آن TypeError از نوع exception و نه ERROR نمایش داده خواهد شد در نتیجه تابعی که در set_error_handler() داده شده است، فراخوانده نمی‌شود و به جای آن PHP٧ خطای زیر را نشان می‌دهد:

آموزش کامل php7

آموزش کامل php7

برای حل این مساله می‌بایست از بلاک‌های try & catch استفاده نمود.

PHP در نسخه هفتم خود، تغییراتی در Exception ها ایجاد کرده است که به شرح زیر است:

آموزش کامل php7

آموزش کامل php7

ویژگی‌های جدید زبانی

عملگرهای جدید

  • عملگر spaceship

PHP٧ با دو عملگر کاملاً جدید به نام‌های spaceship و null coalesce همراه شده استو عملگر spaceship یا سفینه فضایی (<=>) که نام دیگر آن عملگر مقایسه تلفیقی است، به شما اجازه می‌دهد تا مقایسه‌های زنجیره ای یک دست‎تری داشته باشید. عبارت مقابل را در نظر بگیرید:

php7 چیست

php7 چیست

از سمت چپ به راست به خاطر بسپارید: اگر $a کوچک‌تر از $b باشد، ۱- را بر می‌گرداند، اگر مساوی باشند، ۰ و اگر هم $b کوچک‌تر باشد، ۱ را بر می‌گرداند. در واقع عبارت بالا، کوتاه شده این عبارت است:

آموزش php7

آموزش php7

  • عملگر null coalesce

این عملگر همانند کاری که isset() انجام می‌دهد، به بررسی مقادیر برای یک متغیر خاص می‌پردازد. پس:

php7

php7

با استفاده از این عملگر می‌شود:

php7

php7

نوع‎گذاری قوی Strong Type برای مقادیر عددی/رشته‌های متنی

بالاخره در نسخه ۷ پی‎اچ‎پی، strong-type برای پارامترها و مقادیر برگشتی از توابع گنجانده شد. کد زیر تابعی را نشان می‌دهد که نوع پارامترها و مقدار برگشتی از تابع در آن تعیین شده است:

آموزش php7

آموزش php7

هرچند که به صورت پیش فرض اجباری برای این کار نیست ولی اگر برای مثال به جای یک پارامتری که عدد صحیح است، عدد اعشار داده شود، PHP7 آن را تبدیل می‌کند و خطایی نشان نمی‌دهد. می‌توان با روشن کردن حالت strict، استفاده از strong-type را اجباری کرد و در این حالت در صورت عدم تطابق نوع مقادیر، خطای زیر نشان داده شود:

آموزش php7

آموزش php7

به نظر می‌رسد به‎جز مواردی که دربالا به آن‌ها اشاره گردید، ویژگی جدید دیگری به نسخه نهایی PHP٧ اضافه نخواهد شد؛ البته این احتمال وجود دارد که بخش‌های اندکی با تغییر همراه باشد. همانطور که در ابتدای این مطلب بیان شد، آخرین نسخه PHP هنوز بصورت آزمایشی ارائه شده است؛ به همین دلیل تا زمانی که نسخه نهایی آن منتشر نشده، توصیه می‌کنیم از PHP٧ در پروژه‌های خود استفاده نکنید؛ اگر می‌خواهید با ساختار و آخرین تغییرات این زبان آشنا شوید، می‌توانید از نسخه‌های متعددی که برای برنامه نویسان عرضه شده است، استفاده نمایید.

برگرفته از هاست ایران