PHP ابتدا به عنوان یک پروژه کوچک متنباز شروع شد که به تدریج با پیدا شدن کاربردهای زیاد آن، گسترش یافت. راسموس لردورف اولین نسخه PHP را در سال 1994 منتشر کرد. در آن زمان، PHP مخفف “Personal Home Page” بود، زیرا او از آن برای نگهداری صفحه شخصی خود استفاده میکرد.
بعدها او پشتیبانی از پایگاه داده را اضافه کرد و آن را به نام “Personal Home Page/Forms Interpreter” یا PHP/FI نامید، که میتوانست برای ساخت برنامههای وب ساده و پویا استفاده شود.
- PHP از زمان انتشار اولیه خود در سال 1995، نسخههای زیادی را تجربه کرده است. PHP 1.0 در 8 ژوئن 1995 منتشر شد که توسط راسموس لردورف ساخته شد. این نسخه عمدتاً برای ردیابی بازدیدها از رزومه آنلاین او توسعه یافت. سپس PHP 2.0 (1 نوامبر 1997) به عنوان اولین نسخهای که به عنوان یک زبان اسکریپتنویسی مستقل شناخته شد، شامل پشتیبانی از فرمها، پایگاه دادهها و متغیرهای داخلی بود.
- زِیو سوراسکی و اندی گوتمنز در سال 1997 مفسر PHP را بازنویسی کردند و پایهگذار PHP 3 شدند. نام زبان همچنین به یک اختصار بازگشتی تغییر یافت: PHP: Hypertext Preprocessor. آنها همچنین نویسندگان Zend Engine هستند، که یک کامپایلر و محیط اجرایی برای PHP است. PHP 4 که از Zend Engine بهره میبرد، در ماه مه 2000 منتشر شد.
- PHP 5 در سال 2004 منتشر شد که ویژگیهای جدید زیادی از جمله پشتیبانی از برنامهنویسی شیءگرا (OOP)، شیوههای دادهای PHP (PDO) و بهبودهای قابل توجه در عملکرد را شامل میشد.
- PHP 7 نسخهی جدید اصلی PHP است که در سال 2015 توسعه یافت. این نسخه شامل ویژگیهای جدید زبان است که مهمترین آنها معرفی اعلام نوع بازگشتی برای توابع بود که با اعلام نوع پارامترها تکمیل میشود و همچنین پشتیبانی از انواع اسکالر (عدد صحیح، شناور، رشته و بولی) در اعلام پارامترها و انواع بازگشتی.
ویژگیهای جدید در PHP 8 PHP 8
جدیدترین نسخه اصلی است که در نوامبر 2020 منتشر شد. برخی از ویژگیها و تغییرات قابل توجه شامل موارد زیر است:
کامپایلر Just-in-time (JIT) کامپایلر JIT در PHP 8 بهبودهای قابل توجهی در عملکرد عملیاتهای ریاضیاتی فراهم میکند، نه برای استفادههای معمول توسعه وب. کامپایلر JIT این پتانسیل را دارد که برخی از کدها را از C به PHP منتقل کند.
عبارات Match
عبارت جدید “match” که به تازگی معرفی شده، نسبت به دستور switch کوتاهتر است. زیرا match یک عبارت است، نتیجه آن میتواند به یک متغیر اختصاص یابد یا از یک تابع بازگردانده شود. مثال آن به شرح زیر است
<?php $num = 2; echo match($num) { 1 => "One", 2 => "Two", 3 => "Three", default => "Other", }; ?>
نوعهای اتحادیه (Union Types)
نوعهای اتحادیه به جای پذیرش فقط یک نوع، مقادیر را از چندین نوع مختلف میپذیرند. نوعهای اتحادیه در شرایط مختلفی مفید هستند به دلیل سیستم نوعدینامیک PHP. نوعهای اتحادیه مجموعهای از دو یا چند نوع هستند که میتوانند بهطور مساوی استفاده شوند. در اینجا مثالی از نوعهای اتحادیه آورده شده است .
function printData(int|string $data) { echo $data; }
آرگومانهای نامگذاری شده (Named Arguments)
به جای عبور دادن مقادیر به ترتیب، میتوانید از نامها استفاده کنید. در اینجا مثالی از آرگومانهای نامگذاری شده آورده شده است .
function greet($name, $age) { echo "Hello, $name. You are $age years old."; } greet(age: 25, name: "Alia");
ویژگیها (Annotations)
ویژگیها روشی جدید برای افزودن متادیتا به کد هستند. این روش کد را تمیزتر از استفاده از کامنتها میکند. در زیر مثالی از ویژگیها آورده شده است.
#[CustomAttribute] class MyClass { }
نوع بازگشتی استاتیک (Static return type)
توابع تنها میتوانند مقادیر استاتیک (غیرقابل تغییر) را بازگردانند. این ویژگی به ارثبری کلاسها کمک میکند. استاتیک یک نام ویژه برای کلاس است که همراه با self
و parent
اکنون نوع بازگشتی معتبر در نسخه جدید است.
WeakMap WeakMap
ویژگی جدیدی در PHP 8 است. این ویژگی مشابه یک آرایه معمولی یا دیکشنری عمل میکند، اما اشیایی که دیگر نیاز نیستند را در حافظه نگه نمیدارد. در اینجا مثالی از این ویژگی آورده شده است.
class FooBar { private WeakMap $cache; public function getSomethingWithCaching(object $obj) { return $this->cache[$obj] ??= $this->computeSomethingExpensive($obj); } // ... }
PHP 8 – تغییرات و افزودن نوعها PHP 8
نوعهای اتحادیه، نوع بازگشتی استاتیک جدید و نوع جدید mixed را معرفی کرد. PHP 8 همچنین ویژگی Attributes (مشابه با “annotations” در دیگر زبانهای برنامهنویسی) را فراهم کرد که به افزودن متادیتا به کلاسهای PHP کمک میکند.
علاوه بر این، تغییرات و افزودنیهای زیادی به کتابخانه استاندارد PHP اعمال شده است. PHP 8.2.9 جدیدترین نسخه پایدار موجود است.
مراحل مهم در تاریخ انتشار PHP در جدول زیر خلاصه شده است −
- نسخه 1.0 (8 ژوئن 1995): این نسخه با نام رسمی “ابزارهای صفحه خانگی شخصی (PHP Tools)” منتشر شد و اولین باری بود که نام “PHP” استفاده میشد.
- نسخه 2.0 (1 نوامبر 1997): نسخه رسمی “PHP/FI 2.0” منتشر شد. این اولین نسخهای بود که واقعاً به عنوان PHP شناخته میشد و یک زبان مستقل با ویژگیهای فراوانی بود که هنوز هم در نسخههای کنونی وجود دارد.
- نسخه 3.0 (6 ژوئن 1998): توسعه از یک نفر به چندین توسعهدهنده منتقل شد. زِیو سوراسکی و اندی گوتمنز پایهگذاران این نسخه بودند.
- نسخه 4.0 (22 مه 2000): سیستم تجزیه/اجرای دو مرحلهای پیشرفتهای به نام Zend engine اضافه شد.
- نسخه 5.0 (13 ژوئیه 2004): Zend Engine II با مدل شیءگرایی جدید منتشر شد.
- نسخه 5.1 (24 نوامبر 2005): عملکرد بهبود یافته با معرفی متغیرهای کامپایلر در موتور PHP بازسازیشده. همچنین PHP Data Objects (PDO) به عنوان رابط یکپارچه برای دسترسی به پایگاههای داده اضافه شد.
- نسخه 6.x: این نسخه منتشر نشد. این نسخه رها شدهای از PHP بود که قرار بود پشتیبانی از یونیکد بومی را شامل شود.
- نسخه 7.0 (3 دسامبر 2015): Zend Engine 3 منتشر شد. از ویژگیهای جدید این نسخه میتوان به نحوه نوشتاری یکسان برای متغیرها، افزودن Closure::call()، اپراتور ?? (null coalesce)، اعلام نوع بازگشتی، اعلام نوع اسکالر، اپراتور مقایسه سهگانه <=> (“spaceship”) و کلاسهای ناشناس اشاره کرد.
- نسخه 7.3 (6 دسامبر 2018): نحو انعطافپذیر برای Heredoc و Nowdoc اضافه شد.
- نسخه 8.0 (26 نوامبر 2020): از ویژگیهای جدید این نسخه میتوان به کامپایل Just-In-Time (JIT)، آرایهها با اندیس منفی، TypeError در اپراتورهای ریاضیاتی/بیتی نادرست، تغییرات در نحو متغیرها، ویژگیها (Attributes)، آرگومانهای نامگذاری شده (Named arguments)، عبارت match، نوعهای اتحادیه (Union types)، نوع mixed و نوع بازگشتی استاتیک اشاره کرد.
- نسخه 8.1 (25 نوامبر 2021): ویژگیهای جدید شامل شمارشها (Enumerations)، ویژگیهای فقطخواندنی (Readonly Properties)، توابع جدید fsync، fdatasync، array_is_list، ثوابت نهایی کلاسها، و نگارش اکتالی صریح میباشد.
- نسخه 8.2 (8 دسامبر 2022): این نسخه شامل نوعهای ایستا (null، false، true)، نوعهای فرم استاندارد نرمال (DNF)، افزونه تصادفی جدید (Random Extension)، حذف ویژگیهای داینامیک (Dynamic Properties) و بهبود عملکرد است.
- نسخه 8.3 (23 نوامبر 2023): ویژگیهای جدید شامل ثوابت کلاس تایپشده، تابع json_validate()، کلون عمیق ویژگیهای فقطخواندنی، دریافت داینامیک ثابتهای کلاس، افزودنیهای Randomizer و ویژگی Override میباشد.
- نسخه 8.4 (21 نوامبر 2024): از ویژگیهای جدید این نسخه میتوان به هُکهای ویژگیها (Property Hooks)، دسترسی نامتقارن (Asymmetric Visibility)، پیوست کردن عبارات جدید بدون پرانتز و توابع جدید آرایه مانند array_find()، array_find_key()، array_any()، array_all() اشاره کرد.