PHP چیست؟
PHP یه زبان اسکریپت نویسی همه منظوره هست که بیشتر برای توسعه وب استفاده میشه. این زبان رو یه برنامه نویس دانمارکی کانادایی به اسم راسموس لِردورف تو سال 1993 ساخت و تو سال 1995 منتشرش کرد.الان پیاده سازی اصلی PHP توسط گروه PHP توسعه داده میشه. اولش مخفف "Personal Home Page" بود ولی الان مخفف بازگشتی "PHP: Hypertext Preprocessor" محسوب میشه.کدهای PHP معمولاً روی یه وب سرور توسط یه مفسر PHP پردازش میشن. این مفسر میتونه به شکل یه ماژول، یه سرویس پسزمینه (daemon) یا یه فایل اجرایی CGI باشه. روی یه وب سرور، خروجی کدهای PHP که تفسیر و اجرا شدن - که میتونه هر نوع دادهای باشه مثل HTML تولید شده یا حتی داده های باینری مثل تصاویر - میتونه کل یا بخشی از یه پاسخ HTTP رو تشکیل بده.
کاربرد PHP چیه؟
سیستم های قالب وب، سیستم های مدیریت محتوای وب و فریم ورک های مختلفی وجود دارن که میشه ازشون برای سازماندهی یا ساده تر کردن تولید این پاسخ ها استفاده کرد. علاوه بر این، PHP فقط برای وب محدود نیست و میتونه توی کلی کارای دیگه مثل ساخت اپلیکیشن های گرافیکی مستقل یا حتی کنترل پهپادها هم به کار بره. همینطور کدهای PHP رو میشه مستقیماً از طریق خط فرمان هم اجرا کرد.مفسر استاندارد PHP که با موتور Zend کار میکنه، یه نرم افزار رایگانه که تحت لایسنس PHP منتشر شده. این زبان روی پلتفرم های مختلفی پورت شده و روی بیشتر وب سرورها و سیستم عامل های متنوع قابل اجراست.PHP بدون یه مشخصات رسمی یا استاندارد نوشته شده و پیش رفته، یعنی همون پیاده سازی اصلی که وجود داشته، به عنوان استاندارد غیررسمی شناخته شده و بقیه پیاده سازی ها سعی کردن ازش پیروی کنن.
آخرین ورژن PHP
PHP 8 در تاریخ 26 نوامبر 2020 منتشر شد و در حال حاضر دومین نسخه پر استفاده PHP محسوب میشه. این یه نسخه اصلی (major version) هست که تغییرات ناسازگار با نسخه های قبلی داره.ویژگی های جدید و تغییرات مهم شامل موارد زیره:
کامپایل همزمان (Just-in-time compilation - JIT)
PHP 8 از کامپایل همزمان (JIT) پشتیبانی میکنه. این ویژگی میتونه برای برخی موارد استفاده، بهبودهای قابل توجهی در عملکرد ایجاد کنه. با این حال، نیکیتا پوپوف، یکی از توسعه دهنده های PHP در اون زمان، گفته بود که این بهبود عملکرد برای بیشتر وب سایت ها به اندازه ارتقا از PHP 5 به PHP 7 چشمگیر نخواهد بود.بهبودهای چشمگیرتر JIT بیشتر در پردازش های ریاضی مشاهده میشه تا در توسعه معمولی وب. همچنین، این ویژگی امکان انتقال برخی از کدهای نوشته شده به زبان C به PHP رو در آینده فراهم میکنه، چون در بعضی موارد استفاده، عملکرد رو به حدی بهبود میده که PHP میتونه جایگزین C بشه.
اضافه شدن دستور match
PHP 8 یه قابلیت جدید به نام match expression معرفی کرد. این دستور از نظر مفهومی شبیه به switch هست ولی توی بعضی موارد جمع و جورتره. از اونجایی که match یک عبارت محسوب میشه، میشه خروجی اون رو مستقیماً به یه متغیر نسبت داد یا از یه تابع برگردوند.
تغییرات و اضافه شدن انواع داده در PHP 8
PHP 8 ویژگی های جدیدی در سیستم تایپینگ خودش اضافه کرده، از جمله:
- Union Types (امکان تعریف چندین نوع برای یک متغیر یا مقدار بازگشتی)
- یک نوع بازگشتی جدید به نام static
- نوع جدید mixed که ترکیبی از چندین نوع مختلفه
همچنین، "Attributes" (که توی زبان های برنامه نویسی دیگه معمولاً به عنوان Annotations شناخته میشن) به PHP 8 اضافه شدن. این ویژگی اجازه میده متادیتا به کلاس ها اضافه بشه.توی این نسخه، throw از یک دستور (statement) به یک عبارت (expression) تغییر کرده. این یعنی حالا میشه استثناها (Exceptions) رو در جاهایی که قبلاً ممکن نبود، پرتاب کرد.
تغییرات و بهبودهای سینتکس در PHP 8
PHP 8 تغییراتی در نحو (syntax) خودش ایجاد کرده که باعث کوتاهتر، خواناتر و یکدستتر شدن کدها میشه.مثلاً اپراتور nullsafe معرفی شده که عملکردی مشابه اپراتور ?? (null coalescing) داره، ولی برای فراخوانی متدها استفاده میشه. این یعنی حالا میشه از ->? به جای -> استفاده کرد تا نیازی به چک کردن مقدار null قبل از فراخوانی متد نباشه.
محدوده اجرای کد در مفسر PHP
مفسر PHP فقط کدهایی رو اجرا میکنه که داخل محدودههای مشخص (delimiters) قرار دارن. هر چیزی خارج از این محدودهها توسط PHP پردازش نمیشه، هرچند که متنهای غیر PHP ممکنه همچنان تحت تأثیر ساختارهای کنترلی که در کد PHP تعریف شدن، قرار بگیرن.
انواع محدودههای PHP
رایجترین نشانههای شروع و پایان برای کدهای PHP اینها هستن:<?php برای باز کردن?> برای بستنیه نسخه کوتاهتر از این نشانهها به صورت <? هم وجود داره، ولی این محدوده کوتاه (short tag) به دلیل ناسازگاری در برخی پیکربندیهای PHP توصیه نمیشه، چون ممکنه روی بعضی از سرورها غیرفعال باشه.در مقابل، استفاده از کوتاهنویسی <?= برای echo مشکلی نداره و استفاده ازش توصیه میشه. البته قبل از PHP نسخه 5.4.0، این قابلیت فقط در صورتی کار میکرد که تنظیم short_open_tag در فایل تنظیمات PHP فعال باشه، ولی از PHP 5.4.0 به بعد، این ویژگی همیشه در دسترسه.
هدف از این محدودهها چیه؟
هدف اصلی این محدودهها اینه که کدهای PHP رو از محتوای غیر PHP مثل کدهای HTML یا جاوااسکریپت جدا کنن.
اشیا در PHP
قابلیت های پایه ای برنامه نویسی شی گرا در PHP 3 اضافه شد و در PHP 4 بهبود پیدا کرد. این پیشرفت باعث شد که PHP انتزاع بیشتری پیدا کنه و انجام کارهای خلاقانه برای برنامه نویس ها راحت تر بشه. در PHP 5، نحوه مدیریت اشیا به طور کامل بازنویسی شد و مجموعه قابلیت ها گسترش پیدا کرد و عملکرد بهبود یافت.در نسخه های قبلی PHP، اشیا مثل نوع مقدار (value type) مدیریت میشدن. مشکل این روش این بود که اگر کد میخواست یک شی که بهش پاس داده شده رو تغییر بده، مجبور بود از متغیرهای "مرجع" PHP به طور گسترده استفاده کنه، در غیر این صورت یک کپی از شی ایجاد میشد. اما در روش جدید، اشیا با یک هندل (handle) ارجاع داده میشن، نه مقدار.PHP 5 ویژگی های جدیدی مثل متغیرها و متدهای خصوصی و محافظت شده رو معرفی کرد، همراه با کلاس های انتزاعی (abstract classes)، کلاس های نهایی (final classes)، متدهای انتزاعی (abstract methods) و متدهای نهایی (final methods). همچنین، یک روش استاندارد برای تعریف سازنده (constructor) و مخرب (destructor) اضافه شد که شبیه به زبان های شی گرای دیگه مثل C++ هست. علاوه بر این، PHP 5 مدل استانداردی برای مدیریت استثناها (exception handling) ارائه داد.یکی دیگه از قابلیت های اضافه شده در PHP 5 اینترفیس ها (interfaces) بودن که امکان پیاده سازی چندین اینترفیس رو فراهم کردن. همچنین اینترفیس های خاصی وجود دارن که به اشیا اجازه میدن با سیستم زمان اجرا (runtime system) تعامل داشته باشن. مثلا، اشیایی که اینترفیس ArrayAccess رو پیاده سازی کنن، میتونن با سینتکس آرایه ای استفاده بشن، و اشیایی که Iterator یا IteratorAggregate رو پیاده سازی کنن، میتونن در ساختار foreach استفاده بشن.در موتور PHP، ویژگی جدول مجازی (virtual table) وجود نداره، بنابراین متغیرهای استاتیک در زمان کامپایل بر اساس نام متصل میشن، نه مرجع.