پیاچپی
پیاچپی (به انگلیسی: PHP) یک زبان برنامهنویسیِ شیءگرا است که برای طراحی وب توسعه یافتهاست، اما میتوان از آن به عنوان یک زبان عمومی نیز استفادهکرد. تا ژانویهٔ سال ۲۰۱۳ میلادی PHP روی ۲۴۴ میلیون وبگاه و ۲٫۱ میلیون سرور وب نصب شدهاست.[6] این زبان در سال ۱۹۹۵ میلادی توسط راسموس لِردورف (به انگلیسی: Rasmus Lerdorf) ساختهشد و در حال حاضر توسعهٔ آن بر عهدهٔ گروه پیاچپی است.[7] در ابتدا، پیاچپی از عبارت صفحهٔ خانگی شخصی (به انگلیسی: Personal Home Page) گرفته شدهبود.[7] اما اکنون این کلمه مخففِ بازگشتی PHP: Hypertext Preprocessor به معنی پیاچپی: پیشپردازندهٔ ابرمتن است.[8]
الگو برنامهنویسی | دستوری, تابعی, شیءگرا, رویهای, پژواکی |
---|---|
طراحی شده توسط | راسموس لردورف |
توسعهدهنده | راسموس لردورف, اندی گوتمانس, زند (شرکت), زیو سوراسکی |
ظهوریافته در | ۸ ژوئن ۱۹۹۵ |
انتشار پایدار | 8.0.7[1]
۳ ژوئن ۲۰۲۱ |
انتشار آزمایشی | |
پویا، کمزور از ویرایش 7.0: تدریجی[3] | |
زبان پیادهسازی | C (در اصل؛ بعضی از مولفهها سی پلاسپلاس) |
سیستمعامل | شبه یونیکس, مایکروسافت ویندوز |
پروانه | مجوز پیاچپی[4] |
php,[5] phtml, php4, php3, php5, phps, phar, php7 | |
وبگاه | |
پیادهسازیهای بزرگ | |
Zend Engine, HHVM, Phalanger, Quercus, Parrot | |
متأثر از | |
سی++, پرل, سی (زبان برنامهنویسی), جاوا, تیسیال, اچ تی ام ال, جاوااسکریپت, هک | |
تأثیر گذاشته بر | |
هک, فالکن | |
کدهای پیاچپی توسط یک سرور وب که نرمافزار پیاچپی روی آن نصب باشد، تفسیر میشود. دستورهای این زبان میتوانند به صورت مستقیم در درون کدهای اچتیامال قرار بگیرند. زبان پیاچپی از نسخهٔ ۴٫۳ به بعد قابلیت پشتیبانی از واسط خط فرمان را نیز به امکانات خود اضافه کرد. این قابلیت میتواند برای ایجاد نرمافزارهای غیر وبی یا نرمافزارهایی با واسط گرافیکی کاربر مورد استفاده قرار بگیرد.[9]
پیاچپی یک نرمافزار آزاد است که تحت مجوز پیاچپی انتشار یافتهاست. این مجوز به دلیل قرار دادن محدودیت روی استفاده از عنوان پیاچپی، با مجوز همگانی گنو (GPL) سازگار نیست. پیاچپی را میتوان روی اکثر سرورهای وب نصب کرد. همچنین قابلیت نصب آن به صورت یک شل جداگانه روی تقریباً تمامی سیستمهای عامل و پلتفرمها (یا سکوها) وجود دارد.[10] تمامی این استفادهها رایگان است.[11]
تاریخچه
توسعه ی PHP از سال ۱۹۹۴ و زمانی آغاز شد که راسموس لردورف تعدادی اسکریپت به زبان سی نوشت تا صفحهٔ خانگی خود را مدیریت کند. این اسکریپتها که به صورت رابط دروازهٔ مشترک (به انگلیسی: Common Gateway Inteface) نوشته شدهبودند، مسئول انجام عملیاتهای سادهای مانند نشان دادن رزومهٔ راسموس و بررسی آمارهای بازدید از وبگاه او بودند.[7] با گسترش اسکریپتها و افزودن توانایی تعامل با فرمهای وب و ارتباط با پایگاههای داده، نام صفحهٔ خانگی شخصی/مفسر فرم (به انگلیسی: Personal Home Page/Form Interpreter) یا PHP/FI برای آنها انتخاب شد. PHP/FI میتوانست برای ایجاد نرمافزارهای سادهٔ وب استفاده شود.در ابتدا، لردورف برای یافتن خطاهای این اسکریپتها و بهبود آنها، در ۸ جون سال ۱۹۹۵ میلادی اسکریپتها را با نام ابزارهای صفحهٔ خانگی شخصی نسخهٔ ۱٫۰ (به انگلیسی: Personal Home Page Tools version 1.0) تحت مجوز عمومی گنو روی گروه خبری یوزنت منتشر کرد.[12] این نسخهٔ اولیه بسیاری از ویژگیهای نسخهٔ کنونی این زبان را داشت. متغیرها به سبک زبان پرل بودند، مدیریت فرمها وجود داشت و میشد کدها را در درون کدهای اچتیامال قرار داد. قواعد پیاچپی نیز از زبان پرل پیروی میکردند، اما سادهتر، محدودتر و ناپایدارتر بودند.[7] با شکلگیری یک گروه برنامهنویسی و بعد از انجام تستهای فراوان روی نسخهٔ بتا و بازنویسی موتور تجزیهکننده، سرانجام PHP/FI نسخهٔ ۲٫۰ در نوامبر سال ۱۹۹۷ میلادی منتشر گردید.[7]
اندی گاتسمن و زیو سوراسکی با بازنویسی موتور تجزیهکننده در سال ۱۹۹۷ میلادی پایه و اساس نسخهٔ ۳ پیاچپی را بنیان نهادند. این دو نفر با همراهی لردورف با تغییر نام پیاچپی به پیاچپی: پیشپردازندهٔ ابرمتن (به انگلیسی: PHP: Hypertext Preprocessor) که یک مخفف بازگشتی است، در ماه جون ۱۹۹۸ میلادی رسماً پیاچپی نسخهٔ ۳٫۰ را منتشر کردند.[7] بعد از این اتفاق گاتسمن و سوراسکی شروع به نوشتن هستهٔ جدیدی برای زبان پیاچپی کردند که منجر به بهوجودآمدن موتور زِند در سال ۱۹۹۹ میلادی شد. آنها همچنین شرکت زِند تکنولوژی را در کشور اسرائیل تأسیس کردند.[13][14]
در تاریخ ۲۲ مه سال ۲۰۰۰ میلادی، پیاچپی نسخهٔ ۴ که از موتور زند نسخهٔ ۱٫۰ استفاده میکرد، منتشر شد.[7] این نسخه تا ماه اوت سال ۲۰۰۸ میلادی توسعه یافت و به زیرنسخهٔ ۴٫۴٫۹ رسید. هماکنون پشتیبانی این نسخه به پایان رسیدهاست و هیچ بهروزرسانی برای آن منتشر نمیشود.[15][16]
در ۱۳ ژوئیه سال ۲۰۰۴ میلادی، نسخهٔ ۵ پیاچپی که از موتور زند نسخهٔ ۲ بهره میبرد، منتشر شد.[7] نسخهٔ ۵ ویژگیهای زیادی را به پیاچپی اضافه کرد. پشتیبانی کامل از شیء گرایی، افزونهٔ PDO (به انگلیسی: PHP Data Object Extension) (که دسترسی به بانکهای اطلاعاتی را ممکن میساخت) و بهبود بازدهی از جملهٔ این ویژگیها محسوب میشد.[17] از سال ۲۰۰۸ به بعد، با پایان یافتن پشتیبانی از تمامی نسخههای قدیمیتر پیاچپی، نسخهٔ ۵ تنها نسخهٔ در حال گسترش است.
در کنار نسخهٔ ۵ پیاچپی یک نسخهٔ اصلی دیگر در حال توسعه است. با توجه به تغییرات عمدهٔ موجود در این نسخه از جمله پشتیبانی کامل از یونیکد، قرار بود این نسخه به عنوان نسخهٔ ۶ پیاچپی منتشر گردد. اما پیادهسازی پشتیبانی از یونیکد بیش از آنچه انتظار میرفت، به طول انجامید. این امر باعث شد تا در مارس سال ۲۰۱۰ میلادی، این نسخه به بخش در حال توسعه (به انگلیسی: Trunk) منتقل شد و دیگر به آن نسخهٔ ۶ گفته نمیشود.
مهمترین تغییرات این بخش جدید: حذف register_globals
،[18] magic quotes
و safe mode
.[15]
دلیل حذف magic quotes
تأثیرات غیرقابل پیشبینی و دلیل حذف register_globals
خطرهای امنیتی بود که در نرمافزارها ایجاد میکرد. به جای استفاده از magic qoutes
برنامه نویسمیتواند از تابع addslashes()
یا توابع دقیقتری استفاده کنند که برای هر پایگاه داده ایجاد شدهاند، مانند mysql_real_escape_string()
که برای پایگاه داده مایاسکیوال طراحی شدهاست. توابعی که قرار است در نسخهٔ ۶ حذف شوند، از نسخهٔ ۵٫۳ به صورت توصیهنشده (به انگلیسی: Deprecated) درآمدهاند و استفاده از آنها باعث بروز هشدار در نرمافزار خواهد شد.[19]
تعداد بسیار زیادی از پروژههای بزرگ و متنباز که از زبان پیاچپی استفاده میکنند، از سال ۲۰۰۸ با به وجود آمدن جنبش ابتکاری GoPHP5 به معنای برو به پیاچپی ۵ دیگر از پیاچپی نسخهٔ ۴ استفاده نمیکنند. این جنبش توسط بسیاری از توسعهدهندگان پیاچپی پشتیبانی شد تا بتوانند به گسترش استفاده از نسخهٔ ۵ پیاچپی کمک کنند.[20][21][22]
مفسرهای زبان پیاچپی برای هر دو معماری ۳۲بیتی و ۶۴بیتی موجود است. تنها استثنا سیستمعامل ویندوز است که فقط نسخههای ۳۲بیتی برای آن منتشر میشود. اما مدتی است که نسخههای ۶۴بیتی ویندوزی نیز به صورت امتحانی روی وبگاه پیاچپی منتشر میشوند و استفاده از نسخههای امتحانی ۶۴بیتی ویندوز برای سرورهای بزرگ توصیه نمیشود.[23][24]
تاریخچه انتشار
نسخه | تاریخ انتشار | تاریخ اتمام پشتیبانی[25] | یادداشتها |
---|---|---|---|
۱٫۰ | ۸ ژوئن ۱۹۹۵ | این نسخه به صورت رسمی "Personal Home Page Tools" یا "PHP Tools" نامیده شد. کلمهٔ پیاچپی اولین بار در اینجا به کار رفت.[26] | |
۲٫۰ | ۱ نوامبر ۱۹۹۷ | Officially called "PHP/FI 2.0". This is the first release that could actually be characterised as PHP, being a standalone language with many features that have endured to the present day. | |
۳٫۰ | ۶ ژوئن ۱۹۹۸ | ۲۰ اکتبر ۲۰۰۰[25] | توسعهدهندگان از یک به چند نفر افزایش یافتند. زیو سوراسکی و اندی گاتمنس هستهٔ این نسخه را بازنویسی کردند.[7] |
۴٫۰ | ۲۲ مه ۲۰۰۰ | ۲۳ ژوئن ۲۰۰۱[25] | سیستم دومرحلهای تجزیه/اجرای پیشرفته تحت عنوان موتور زند به این نسخه اضافه شد.[27] |
۴٫۱ | ۱۰ دسامبر ۲۰۰۱ | ۱۲ مارس ۲۰۰۲[25] | متغیرهای فوقِ سراسری(Superglobal) معرفی شدند. (GET ، $_POST ، $_SESSION و…)[27] |
۴٫۲ | ۲۲ آوریل ۲۰۰۲ | ۶ سپتامبر ۲۰۰۲[25] | تنظیم register_globals به صورت پیشفرض غیرفعال شد. با این تغییر اطلاعاتی که از طریق شبکه ارسال میشدند، دیگر بهطور مستقیم در محدودهٔ متغیرهای فوقِ سراسری قرار نمیگرفتند. این نکته مشکلات امنیتی احتمالی بسیاری از نرمافزارها را برطرف کرد.[27] |
۴٫۳ | ۲۷ دسامبر ۲۰۰۲ | ۳۱ مارس ۲۰۰۵[25] | واسط خط فرمان یا همان CLI به این نسخه اضافه شد.[27] |
۴٫۴ | ۱۱ ژوئیه ۲۰۰۵ | ۷ اوت ۲۰۰۸[25] | صفحات راهنما(man page) برای دستورات phpsize و config-php اضافه شد.[27] |
۵٫۰ | ۱۳ ژوئیه ۲۰۰۴ | ۵ سپتامبر ۲۰۰۵[25] | موتور زند نسخهٔ ۲ معرفی شد.[28] |
۵٫۱ | ۲۴ نوامبر ۲۰۰۵ | ۲۴ اوت ۲۰۰۶[25] | بهبود بازدهی با معرفی متغیرهای مترجم (Compiler Variables) در موتور جدید پیاچپی.[28] مدل PDO به عنوان یک رابط پایدار برای برقراری ارتباط با بانکهای اطلاعاتی معرفی شد.[29] |
۵٫۲ | ۲ نوامبر ۲۰۰۶ | ۶ ژانویه ۲۰۱۱[25] | افزونهٔ فیلتر (Filter Extension) به صورت پیشفرض فعال شد. پشتیبانی از جیسَن (JSON) افزوده شد.[28] |
۵٫۳ | ۳۰ ژوئن ۲۰۰۹ | ۱۴ اوت ۲۰۱۴[25] | پشتیبانی از namespace, late static binding، دستور jump (نسخهٔ ضعیف شدهٔ دستور Goto) و زباله جمعکن. پشتیبانی بهتر از سیستمعامل ویندوز. پشتیبانی از اسکیواللایت نسخهٔ ۳. کتابخانهٔ Mysqlnd جایگزین کتابخانهٔ libmysql (که مسئول برقراری ارتباط با بانکاطلاعاتی مایاسکیوال بود) شد. افزونهٔ fileinfo که کارایی بهتری در مورد MIMEها دارد، جایگزین افزونهٔ mime_magic شد. افزونهٔ بینالملل (Internationalization) اضافه شد و توابع ereg از دور خارج شدند. |
۵٫۴ | ۱ مارس ۲۰۱۲ | ۳ سپتامبر ۲۰۱۵[25] | پشتیبانی از Trait. پشتیبانی از آرایهها با فرمت کوتاه. سرور وب داخلی.[30] بهبود کارایی و استفاده از حافظه به میزان کمتر. توابع حذف شده: register_globals , safe_mode , allow_call_time_pass_reference , session_register |
۵٫۵ | ۲۰ ژوئن ۲۰۱۳ | ۱۰ ژوئیه ۲۰۱۶[31] | جنراتورها افزوده شدند(Generators). بهینهساز زند+ (Zend Optimizer+) افزوده شد.[32] |
۵٫۶ | ۲۸ اوت ۲۰۱۴ | ۳۱ دسامبر ۲۰۱۸[31] | قابلیت بازنویسی عملگرها (Operator Overloading). ایجاد تغییرات در GMP یا GNU Multiple Precision.[33] |
۶٫x | منتشر نشده | ن/م | Abandoned version of PHP that planned to include native Unicode support.[34][35] |
۷٫۰ | ۳ دسامبر ۲۰۱۵[36] | ۳ دسامبر ۲۰۱۸[37] | Zend Engine 3 (performance improvements[38] and 64-bit integer support on Windows[39]), uniform variable syntax,[40] AST-based compilation process,[41] added Closure::call() ،[42] bitwise shift consistency across platforms,[43] ?? (null coalesce) operator,[44] Unicode code point escape syntax,[45] return type declarations,[46] scalar type (integer, float, string and boolean) declarations,[47] <=> "spaceship" three-way comparison operator,[48] generator delegation,[49] anonymous classes,[50] simpler and more consistently available CSPRNG API,[51] replacement of many remaining internal PHP "errors" with the more modern exceptions,[52] and shorthand syntax for importing multiple items from a namespace.[53] |
۷٫۱ | ۲۱ نوامبر ۲۰۱۶ | ۱ دسامبر ۲۰۱۹ [31] | مقدار بازگشتی void ,[54] تعیین میزان دید برای ثابت ها در کلاس[55] |
۷٫۲ | ۳۰ نوامبر ۲۰۱۷ | ۳۰ نوامبر ۲۰۲۰[31] | Object parameter and return type hint[56]، Libsodium extension[57]، Abstract method overriding[58]، Parameter type widening[59] |
۷٫۳ | ۶ دسامبر ۲۰۱۹ (۱۵ آذر ۱۳۸۹) [60] | ۶ نوامبر ۲۰۲۱ (۱۵ آبان ۱۴۰۰) | Flexible Heredoc and Nowdoc syntax[61]، support for reference assignment and array deconstruction with list()[62]، PCRE2 support[63]، hrtime() function[64] |
۷٫۴ | ۲۸ نوامبر ۲۰۱۹ (۷ آذر ۱۳۹۸) [65] | ۲۸ نوامبر ۲۰۲۲ (۷ آذر ۱۴۰۱) | |
۸ | ۲۶ نوامبر ۲۰۲۰ (۶ آذر ۱۳۹۹) [66] | ۲۶ نوامبر ۲۰۲۳ (۵ آذر ۱۴۰۲) | کامپایل درجا، آرایه ها میتوانند با یک ایندکس منفی شروع شوند، consistent type errors for internal functions، fatal error for incompatible method signatures |
۸/۱ | نوامبر ۲۰۲۰ (آبان ۱۳۹۹) | نوامبر ۲۰۲۴ (آبان ۱۴۰۳) | Explicit octal integer literal notation,[67] |
ایجاز: نگارش قدیمی نگارش قدیمیتر، هنوز پشتیبانی میشود نگارش پایدار جاری آخرین نگارش پیشنمایش انتشار آتی |
از تاریخ ۲۸ جون سال ۲۰۱۱ میلادی (برابر ۷ تیر ۱۳۹۰)، گروه پیاچپی برنامهای مدون برای انتشار نسخههای آیندهٔ این زبان را منتشر کرد.[68] بر اساس این برنامه، هر ماه یک انتشار جزئی و هر سال یک انتشار اصلی اتفاق خواهد افتاد. از هر نسخه از پیاچپی تا ۳ سال پشتیبانی میشود. تا ۲ سال تمامی بهروزرسانیها و سال سوم تنها بهروزرسانیهای امنیتی برای هر نسخه منتشر میشود.
ساختار
برنامه Hello World زیر با استفاده از زبان پیاچپی که در درون کدهای اچتیامال قرار گرفتهاست، نوشته شده:
<!DOCTYPE html>
<meta charset="utf-8">
<title>PHP Test</title>
<?php
echo 'Hello World';
?>
از آنجایی که پیاچپی نیازی ندارد که در درون کدهای اچتیامال قرار بگیرد یا روی سرور وب اجرا شود، کوتاهترین برنامه Hello World پیاچپی به صورت زیر است:
<?= 'Hello world';
مفسر پیاچپی تنها کدهایی را که در درون جداکنندههای پیاچپی قرار بگیرند، تفسیر میکند. معروفترین جداکنندههای پیاچپی علامت <?php
و ?>
است. جداکنندههای دیگری، مانند <script language="php">
و </script>
یا جداکنندهٔ کوتاه <?
یا <?=
(که برای خروجی دادن متن یا متغیر استفاده میشود) و <% یا <%= و %> نیز وجود دارند. تمامی نوشتههایی که در خارج از جداکنندههای پیاچپی قرار بگیرند، توسط مفسر تفسیر نشده و به عنوان خروجی ارسال خواهند شد. استفاده از جداکنندههای کوتاه میتواند از قابلیت حمل برنامه بکاهد. ازآنجاکه این جداکنندههای توسط تنظیمات پیاچپی فعالسازی نمیشود، استفاده از این جداکنندهها توصیه نمیشود.[69] هدف تمامی این جداکنندهها این است که کد پیاچپی را از قسمت غیر-پیاجپی مانند اچتیامال جدا کند.[70]
نام متغیرها در زبان پیاچپی حتماً باید با نماد دلار آغاز شود و نیازی به مشخص کردن نوع آنها نیست. برخلاف نام توابع و کلاسها نام متغیرها به بزرگی و کوچکی حروف حساس هستند. خطوط جدید و فاصلهها نادیده گرفته شده (به جز فاصلههایی که در درون رشتهها قرار داشته باشند) و تمامی دستورهای این زبان با علامت سمیکولن (;) پایان مییابند.[71] در زبان پیاچپی به ۳ صورت متفاوت میتوان کامنت گذاشت. از علامتهای /* */ برای کامنتهای چندخطی و از علامتهای // یا # برای کامنتهای یک خطی استفاده میشود.[72]
از نظر ساختار کلی و کلمات کلیدی، پیاچپی مانند بسیاری از زبانهای سطح بالا از قواعد زبان سی پیروی میکند. اما برای تمام ساختارهای کنترلی قواعد نوع دومی نیز وجود دارد که میتوان از آنها مانند ساختار اصلی بهره برد.[73] این قواعد نوع دوم مانند زبانهای خانوادهٔ بیسیک است.
انواع داده
زبان پیاچپی دادههای عددیِ صحیح را بر اساس نوع پلتفرم ذخیره میکند. در سیستمهای ۳۲بیتی و ۶۴بیتی به ترتیب اعداد صحیح بهصورت ۳۲ و ۶۴بیتی ذخیره میشوند. اعداد بدون علامت در عملکردی که مانند هیچکدام از زبانها برنامهنویسی دیگر نیست، در موقعیتهایی به اعداد علامتدار تبدیل میشود.[74] اعداد صحیح میتوانند با مبنای ده (به صورت مثبت یا منفی یا مثبت)، در مبنای ۱۶، در مبنای ۸ یا در مبنای ۲ مقداردهی شود.[75] اعداد اعشاری نیز با توجه به پلتفرم ذخیره میشوند. این اعداد را به صورت اعشاری ساده یا ۲ حالت از نمایش علمی میتوان مشخص کرد.[76] پیاچپی مانند زبانهای جاوا و سی++ بهصورت پیشفرض دادههای بولی (صحیح و غلط) را در خود تعریف کردهاست. بر اساس قوانین تبدیل متغیرها در این زبان، تمامی متغیرهای غیر صفر به صحیح و تمامی متغیرها با مقدار صفر به غلط تبدیل میشوند.[77] عملکردی مشابه در زبان پرل و سی++ وجود دارد. نوع دادهای به نام نال (null) نیز در این زبان وجود دارد. متغیر نال هیچ مقداری ندارد. تنها متغیر از نوع نال NULL (کلمهٔ نال با حروف بزرگ) است.[78] دادههایی که از نوع منبع (Resource) هستند، نمایانگر اشارهگرهایی به منابع خارجی است. این نوع متغیرها توسط خانوادهٔ خاصی از توابع که از معمولاً در یک افزونه قرار دارند، ایجاد شده و تنها توسط همین خانواده از توابع قابل استفاده است. دادههایی مانند فایل، تصاویر و اتصالها به پایگاههای داده مثالهایی از منابع خارجی هستند که نیاز به متغیرهای منبع دارند.[79] آرایهها میتوانند اعضایی از تمامی انواع دادهای را در خود داشتهباشند که پیاچپی از آنها پشتیبانی میکند. ترتیب در آرایههای پیاچپی حفظ میگردد. آرایهها در واقع جداول درهمسازی هستند که میتوانند برای هر عضو خود یک کلید داشتهباشند. در صورتی که کلیدی برای عضو مشخص نگردد، مانند آرایههای معمولی، بهصورت خودکار از اعداد بهعنوان کلید استفاده میگردد. این شمارهگذاری از عدد صفر آغاز میشود. همچنین اعضای با کلید و بدون کلید میتوانند در کنار هم در یک آرایه قرار بگیرند.[80] پیاچپی دادههای رشته ای نیز دارد. رشتهها میتوانند در درون علامت ' یا قرار گرفته یا با قواعد نوداک (nowdoc) و هیِرداک (heredoc) نوشتهشوند.[81]
کتابخانه استاندارد پیاچپی (SPL: Standard PHP Library) در تلاش است تا بتواند انواع دادههای استاندارد را به بهترین نحو توسط کلاس و اینترفیس پیادهسازی کند. این دادهها شامل لیست پیوندی، پشته، صف و … است.[82]
توابع
زبان پیاچپی صدها تابع پایه و هزاران تابع افزونه دارد. اکثر این توابع بهخوبی روی وبگاه پیاچپی مستندسازی شدهاند. نامگذاری توابع پایهٔ این زبان از قوانین یکسانی و مشخصی پیروی نمیکند.[83] پیاچپی تاکنون توابعی برای پشتیبانی از رشتههای اجرایی (Thread) ارائه نکردهاست، اما از سیستمهای چندپردازنده پازیکس (POSIX) پشتیبانی میکند.[84]
توابع جدید میتوانند به شکل زیر تعریف شوند:
function myNameFunction() { // تابع را تعریف میکند
return 'John Doe'; // مقداری را بازمیگرداند
}
echo 'My name is ' . myNameFunction() . '!';
// خروجی متن مقابل خواهد بود: 'My name is John Doe!'
در نسخهٔ ۵٫۲ و نسخههای قبل آن توابع دست اول نبوده و تنها بهصورت مستقیم یا غیرمستقیم با نامشان قابل فراخوانی هستند.[85] توابع پیاچپی میتوانند بدون نوشتن نمونه اولیه (Prototype) تعریف شوند.[85] تعریف توابع میتواند در درون بلاکهای شرطی قرار بگیرند تا در شرایط خاص تعریف شود. تمامی توابع پیاچپی در هنگام فراخوانی در جلوی خود باید پرانتز داشتهباشند. متغیرهایی که با دستور new ساخته میشود، در صورتی که آرگومان نداشتهباشد، از این قاعده مستثنی هست. پیاچپی قابلیت تعریف توابع بدون نام را ندارد، اما میتوان با قرار دادن نامِ یک تابع در متغیر تابع را بهصورت غیرمستقیم فراخوانی کرد.[85]
از نسخهٔ ۵٫۳ به بعد میتوان با استفاده از قابلیت بستار (Closure)، توابع بدوناسم را به صورت زیر تعریف کرد:
function getAdder($x) {
return function($y) use ($x) {
return $x + $y;
};
}
$adder = getAdder(8);
echo $adder(2); // خروجی عدد ۱۰ خواهد بود
در تکهکد بالا، تابع getAdder به کمک متغیر $x
یک بستار تعریف میکند که متغیر $y
را بهعنوان ورودی میگیرد. این نوع تابع یک شیء دست اول است به این معنی که میتوان آن را در یک متغیر نگاه داشت و میتوان بهعنوان ورودی آن را به توابع دیگر داد و استفادههای دیگری از آن کرد. (توضیحات کاملتر در وبگاه ویکی پیاچپی موجود است)
دستور goto
نیز در زبان پیاچپی بهشکل زیر قابل استفاده است:
function lock() {
$file = fopen('file.txt', 'r+');
retry:
if (!flock($file, LOCK_EX | LOCK_NB)) {
goto retry;
}
fwrite($file, 'Success!');
fclose($file);
}
هنگامی که تابع flock
فراخوانده میشود، پیاچپی سعی میکند تا فایلی را قفل کند. کلمهای که قبل از علامت :
در ابتدای خط قرار میگیرد، نام خط را مشخص میکند. (در اینجا retry
) این نام را میتوان در دستور goto
بهعنوان مقصد استفاده کرد. مقصدهای دستور goto
در زبان پیاچپی باید درون فایل و محیط جاری باشند. پشتیبانی از این دستور از نسخهٔ ۵٫۳ به پیاچپی افزوده شدهاست.[86]
دستور if
در زبان پیاچپی از توابع شرطی بهشکل زیر قابل استفاده است:
$t = date("H");
if ($t < "20") {
echo "Have a good day!";
}
خروجی "Have a good day!" اگر زمان فعلی (HOUR) کمتر از 20 باشد چاپ خواهد شد.[87]
اشیاء
قابلیت برنامهنویسی شیءگرایی بهصورت ابتدایی در نسخهٔ ۳ به زبان پیاچپی افزوده و در نسخهٔ ۴ بهتر شد.[7] این قابلیت که در نسخهٔ ۵ کاملاً بازنویسی شدهبود، با افزایش قابلیتها و بهبود عملکرد در درون زبان قرار گرفت.[88] در نسخههای قبلی پیاچپی، با اشیاء مانند یک نوع داده برخورد میشد.[88] بنابراین، باید در هر بار مقداردهی یا ارسال شیء به یک تابع، کل محتویات شیء در یک فضای حافظه جدید کپی شود، اما در نسخهٔ ۵ نحوهٔ مدیریت اشیا تغییر کرد. از این پس، اشیاء با یک اشارهگر به فضای حافظه مشخص میشود، نه با مقادیرشان. در کنار این بهبودها، مفاهیم جدیدی مانند متغیرهای شخصی (Private member variables) و عمومی (Public member variables) و همچنین کلاسهای انتزاعی (Abstract Class)، کلاسهای نهایی (Final Class) و بسیاری موارد دیگر نیز معرفی شد. نحوهٔ تعریف متدهای سازنده (Constructors) و تخریبکننده (Destructors) نیز مانند زبان سی++ استانداردسازی شد و راه حلی برای مدیریت خطاها و استثناها ارائه گردید. علاوهبر این موارد، پیاچپی ۵ قابلیت استفاده از اینترفسها (Interface) را نیز معرفی و از پیادهسازی چندین اینترفیس در یک کلاس پشتیبانی کرد. در این میان، اینترفیسهای خاصی برای برقرار کردن رابطه با ساختارهای زبان بهوجود آمدند. مثلاً، با کلاسهایی که اینترفیس ArrayAccess
را پیادهسازی کنند، میتوان مانند آرایهها برخورد کرد.[89]
اگر شخص برنامهنویس با استفاده از کلمهٔ کلیدی clone
سعی کند که یک شیء را کپی کند، موتور زند ابتدا بررسی میکند که متد __clone
در درون کلاس تعریف شدهاست یا خیر. در صورتی که تعریف نشدهباشد، متد پیشفرض __clone
فراخوانی میشود که تمامی خصوصیات کلاس را کپی میکند. اما اگر این متد در کلاس وجود داشتهباشد، مسئولیت کپی کردن و مقداردهی در کلاس کپیشده بر عهدهٔ این متد خواهد بود.[90]
یک نمونهکد ابتدایی از برنامهنویسی شیءگرا به زبان پیاچپی بهشکل زیر است:
class Person {
public $firstName;
public $lastName;
public function __construct($firstName, $lastName = '') {
$this->firstName = $firstName;
$this->lastName = $lastName;
}
public function greet() {
return "Hello, my name is " . $this->firstName . " " . $this->lastName . ".";
}
public static function staticGreet($firstName, $lastName) {
return "Hello, my name is " . $firstName . " " . $lastName . ".";
}
}
$he = new Person('John', 'Smith');
$she = new Person('Sally', 'Davis');
$other = new Person('iAmine');
echo $he->greet(); // prints "Hello, my name is John Smith."
echo '{{سخ}}';
echo $she->greet(); // prints "Hello, my name is Sally Davis."
echo '{{سخ}}';
echo $other->greet(); // prints "Hello, my name is iAmine."
echo '{{سخ}}';
echo Person::staticGreet('Jane', 'Doe'); // prints "Hello, my name is Jane Doe."
میدان دید متغیرها و متدهایی که در درون کلاسهای پیاچپی تعریف میشود، بهوسیلهٔ کلمات کلیدی مانند public
، private
و protected
مشخص میگردد. کلمهٔ کلیدی var
نیز که در نسخههای قدیمیتر استفاده میشد، هماکنون معادل public
است. متدها و خاصیتهای public
در همهجا قابل دسترسی هستند. protected
دسترسی آنها را به کلاسهای مشتقشده (Inherited Class) محدود کرده و private
دسترسی را فقط برای کلاس تعریفکننده میسر میسازد.[91] در پیاچپی، اشیائی از یک نوع میتوانند به متدها و خاصیتهای خصوصی (private) یکدیگر دسترسی داشتهباشند. در بسیاری از موارد، قابلیتهای میدان دید در این زبان مفید دانسته میشود.[92] با این حال عدهای نیز آنها را ناکارآمد میدانند.[93]
پیادهسازیها
در ابتدا، زبان پیاچپی به صورت یک زبان مفسری پیادهسازی شد و امروزه نیز این پیادهسازی پرکاربردترین نسخهٔ مورد استفاده است. تعدادی مترجم نیز برای این زبان ایجاد شدهاست که این زبان را از مفسرها دور میکند. مترجمها در زمان اجرا، قابلیت آنالیز ایستا (Static Analysis) و رابطهٔ بهینه با زبانهای دیگر نسبت به مفسرها برتری دارند.
از مترجمهای مطرح زبان پیاچپی میتوان به فالانگر اشاره کرد که کد پیاچپی را به بایتکد زبان میانی مشترک (CIL) تبدیل میکند، و هیپهاپ که به صورت منبعباز توسط فیسبوک توسعه داده میشود. مترجم هیپهاپ با تبدیل کد پیاچپی به کد زبان سی++ میتواند سربار سرور را تا ۶ برابر کاهش دهد.[94]
از روشهای دیگری که برای بهبود زمان اجرا اسفاده میشود، میتوان از بهینهسازی کد نام برد. این عمل با کاهش حجم کد، حذف و ادغام قسمتهای تکراری و تغییرات متفاوت دیگر صورت میگیرد. قابلیت بهینهسازی کد در زبان پیاچپی نیز موجود بوده و برنامهها و افزونههایی، مانند eAccelerator برای این منظور توسعه داده میشود.[95]
برای کاهش سربار ترجمه در زبان پیاچپی میتوان از حافظه نهان برای کدهای عملیاتی (Opcode Caching) نیز استفاده کرد. در این روش، دستورهای ترجمهشده، در حافظهٔ مشترک (Shared Memory) قرار میگیرد تا از ترجمهٔ مجدد آنها جلوگیری شود. از نسخهٔ ۵٫۵ به بعد افزونه Zend Opcache که از این روش برای افزایش کارایی استفاده میکند، به صورت پیشفرض به زبان پیاچپی افزوده شد.[96] از نمونههای دیگر حافظهٔ نهان برای کدهای عملیاتی میتوان به Alternative PHP Cache (APC) اشاره کرد.[97]
پروانه انتشار
پیاچپی یک نرمافزار آزاد است که با پروانه پیاچپی منتشر میشود.[11] این پروانه علاوه بر قوانین موجود در نرمافزارهای آزاد اعلام میدارد که:
- تمامی محصولاتی که بر پایهٔ پیاچپی گسترش مییابند، نباید بدون اجازهٔ قبلی از group@php.net از نام "PHP" برای نامگذاری استفاده کنند. شما میتوانید با قرار دادن کلمهٔ "for PHP" (بهمعنای برای پیاچپی) در نام محصول خود نشان دهید که محصول شما با زبان پیاچپی کار میکند. مثلاً استفاده از نام "PHP Foo" غیرمجاز است، در حالیکه استفاده از "Foo for PHP" بدون مشکل خواهد بود.
وجود این محدودیت در پروانهٔ این زبان آن را با پروانه عمومی همگانی گنو (GPL) ناسازگار میکند.[98]
توسعه و جامعیت
پی اچ پی شامل کتابخانه های منبع باز و آزاد مختلفی در منبع توزیع خود می شود، یا از آن ها در برنامه های دودویی پی اچ پی استفاده می کند. پی اچ پی اساساً یک سامانه اینترنت فهم با ماژول های داخلی است که از طریق این ماژول ها به سرورهای FTP (پروتکل انتقال فایل) و بسیاری از سرورهای پایگاه داده از جمله PostgreSQL،MySQL،Microsoft SQL Server و SQLite (که یک پایگاه داده توکار است)، سرورهای LDAP و غیره. بسیاری از توابعی که برنامه نویسان زبان C با آن ها آشنایی دارند، مانند آن هایی که در خانواده stdio قرار دارند، در برنامه های استاندارد پی اچ پی قابل دسترسی هستند.
پی اچ پی به توسعه دهندگان این اجازه را می دهد تا با نوشتن افزونه هایی به زبان C، به زبان پی اچ پی کارایی لازم را ببخشند. افزونه های پی اچ پی می توانند به صورت ایستا در داخل پی اچ پی کامپایل شوند یا به صورت پویا در زمان اجرا بارگزاری شوند. افزونه های بی شماری نوشته شده اند تا از ویندوز اِی پی آی، فرآیند مدیریت در سیستم عامل های شبه یونیکس، رشته های چند بایتی (یونیکد)، cURL و چند قالب فشرده سازی محبوب پشتیبانی کنند. دیگر ویژگی های پی اچ پی که توسط افزونه ها در دسترس قرار گرفتند، شامل مجتمع سازی با IRC، تولید پویای تصاویر و محتوای ادوبی فلش، اشیاء داده پی اچ پی (PDO) که به عنوان یک لایه ظاهری برای دسترسی به پایگاه داده به کار می رود، و حتی ترکیب صدا می شود. بخشی از توابع هسته زبان، مانند آن هایی که با رشته ها و آرایه ها سروکار دارند، نیز به عنوان افزونه پیاده سازی شده اند. پروژه کتابخانه جامع افزونه های پی اچ پی (PECL) مخزنی برای افزونه های به زبان پی اچ پی است.
چند پروژه دیگر مانند زفیر (Zephir)، برای افزونه های پی اچ پی این توانایی را فراهم می کنند تا به یک زبان سطح بالا نوشته شده و به افزونه های داخلی پی اچ پی کامپایل شوند. چنین رویکردی، به جای نوشتن افزونه های پی اچ پی به زبان C به صورت مستقیم، توسعه افزونه ها را تسهیل کرده و زمان لازم برای برنامه نویسی و تست را کاهش می دهد.
در دسامبر سال ۲۰۱۸ میلادی، گروه پی اچ پی شامل ۱۰ نفر بود: سیِز سی آرِنتزِن، استیگ باکِن، شِین کاراوِئو، اندی گاتمَنز، راسموس لردورف، سم رابی، ساشا شومان، زیو سوراسکی، جیم وینستِد و آندرِی زِمینِوسکی.
فناوری زِند بر اساس آزمون پی اچ پی ۵.۵ یک گواهی نامه پی اچ پی برای برنامه نویسان صادر می کند تا به عنوان توسعه دهندگان مجاز شناخته شوند.
نصب و تنظیمات
بهطور کلی، دو روش اصلی برای نصب زبان پیاچپی بر روی سرورهای وب هست. در بسیاری از سرورهای وب یک ماژول مستقیم به نام Server Application Programming Interface یا SAPI وجود دارد. برای مثال، سرورهای آپاچی، مایکروسافت آیآیاس و آیپلنت (iPlanet) از این روش استفاده میکنند. تعدادی دیگر از سرورهای وب نیز از Internet Server Application Programming Interface یا ISAPI پشتیبانی میکنند. اگر زبان پیاچپی در سرور وب ماژولی نداشتهباشد، همواره میتوان از آن به عنوان Common Gateway Interface یا CGI و FastCGI استفاده کرد. در این حالت باید سرور را تنظیم کرد تا تمامی درخواستهای مربوط به زبان پیاچپی را با فایلهای CGI اجرا کند.[99]
برای نوشتن برنامههای دارای رابط گرافیکی نیز میتوان از افزونهٔ PHP-GTK در زبان پیاچپی استفاده کرد. این افزونه در نسخهٔ منتشر شده موجود نیست و باید به این زبان افزودهشود.[99] برای استفاده از این افزونه، نسخهٔ پیاچپی باید بالاتر از ۵٫۱ باشد. رایجترین روش برای نصب این افزونه، ترجمهٔ کد آن میباشد.[100]
هنگامی که از زبان پیاچپی در محیطهای ابری استفاده میشود، کیتهای توسعه نرمافزار (SDK) خاصی برای استفاده از امکانات محیط نیز همراه با آن منتشر میگردد. برای مثال:
- سرویسهای وب آمازون کیت AWS SDK For PHP را ارائه کردهاست.
- ویندوز اژور (Windows Azure) نیز کیت Windows Azure SDK for PHP را در اختیار عموم قرار دادهاست.
امنیت
۲۹٪ از مشکلات امنیتی که در ماه سپتامبر سال ۲۰۱۳ میلادی توسط پایگاه داده امنیتی ملی (National Vulnerability Database) منتشر شد، با زبان پیاچپی مرتبط هست.[101] این مسائل اکثراً به دلیل نبود استفاده از روشهای مناسب توسط برنامهنویسان ایجاد میشود. و این در حالیاست که مشکلات تکنیکی که در خود زبان پیاچپی وجود دارند، بسیار کم هستند. (۲۳ مشکل در سال ۲۰۰۸، کمتر از ۱٪ مشکلات)[102][103] با توجه به اینکه برنامهنویسها اشتباهات بسیاری میکنند، بارها پیشنهاد شدهاست که قابلیتهایی برای تشخیص خطاهای امنیتی در زبان پیاچپی گنجانده شود تا این خطاها را به برنامهنویس گزارش بدهد. با اینکه چنین ابزاری برای زبان پیاچپی در حال توسعه است،[104] اما این پیشنهادها تاکنون رد شده و این ابزارها به زبان افزوده نشدهاند.[105]
تست PHP
تست برنامههای کاربردی و نرمافزارهای توسعه داده شده با PHP از جهتهای مختلف حایز اهمیت هستند. با توجه به استفاده فراگیر PHP در برنامههای کاربردی وب (Web Applications)تست کارایی (Performance Testing)از اهمیت دوچندانی برخوردار است. همچنین ابزارهای بازبینی و مرور کد نیز کمک فراوانی به توسعه دهندگان میکند که بتوانیم بسیاری از اشکالات را در سطح کد و قبل از تست برطرف نماییم.
جستارهای وابسته
منابع
- https://www.php.net/ChangeLog-8.php#8.0.7; تاریخ انتشار: 3 ژوئن 2021; زمان بازیابی دادهها: 4 ژوئن 2021.
- "Release php-8.0.0RC5". 19 November 2020. Retrieved 24 November 2020.
- "PHP: Function arguments - Manual". secure.php.net.
- http://php.net/license/; زمان بازیابی دادهها: 25 اوت 2016.
- https://fileinfo.com/extension/php.
- Andy Ide (January 31, 2013), PHP just grows & grows, Netcraft, retrieved September 22, 2013
- History of PHP, PHP Website, retrieved September 22, 2013
- Preface, PHP Webiste, retrieved September 22, 2013
- What can PHP do?, PHP Website, retrieved September 22, 2013
- PHP: Installation and Configuration, PHP Website, retrieved September 22, 2013
- The PHP License, version 3.01, PHP Website, retrieved September 22, 2013
- Rasmus Lerdorf (June 8, 1995), Announce: Personal Home Page Tools (PHP Tools), retrieved September 24, 2013
- PHP and Zend Engine, Zend, retrieved September 24, 2013
- Zend Takes Home Award for Best Israeli Startup Company, Zend Press, June 21, 2006, retrieved September 24, 2013
- PHP: News Archive 2007, PHP News, 2007, retrieved September 24, 2013
- Sean Michael Kerner (February 01, 2008), PHP 4 is Dead—Long Live PHP 5, Internet News, retrieved September 24, 2013 Check date values in:
|تاریخ=
(help) - Adam Trachtenberg (July 15, 2004), Why PHP 5 Rocks!, O'Reilly, retrieved September 24, 2013
- Description of core php.ini directives, PHP, retrieved September 24, 2013
- Deprecated features in PHP 5.3.x, PHP, retrieved September 24, 2013
- Go PHP5!, Edge Hill University, July 01, 2007, retrieved September 24, 2013 Check date values in:
|تاریخ=
(help) - PEARL: Joining the GoPHP5.org's movement, retrieved September 24, 2013
- Lets Go PHP5, Hawk Host Blog, January 20, 2008, retrieved September 24, 2013
- PHP for Windows, PHP, retrieved September 24, 2013
- PHP For Windows: Binaries and sources Snapshots, retrieved September 24, 2013
- "Unsupported Branches". php.net. Retrieved 2015-11-14.
- PHP: PHP 4 ChangeLog, retrieved September 24, 2013
- PHP: PHP 5 ChangeLog, PHP, retrieved September 24, 2013
- Introduction to PDO, PHP, retrieved Spetember 24, 2013 Check date values in:
|تاریخ بازبینی=
(help) - PHP: Built-in web server - Manual, retrieved September 24, 2013
- "Supported Versions". php.net. Retrieved 2017-12-13.
- What is new in PHP 5.5.4, Mildcoder, retrieved September 24, 2013
- PHP RFC: Internal operator overloading and GMP improvements, May 12, 2013, retrieved September 24, 2013
- "Resetting PHP 6".
There have been books on the shelves purporting to cover PHP 6 since at least 2008. But, in March 2010, the PHP 6 release is not out — in fact, it is not even close to out. Recent events suggest that PHP 6 will not be released before 2011 — if, indeed, it is released at all.
- "PHP 7 moves full speed ahead".
Recent versions of PHP have been part of the 5.x release series, but there will be no PHP 6. "We're going to skip [version] 6, because years ago, we had plans for a 6, but those plans were very different from what we're doing now," Gutmans said. Going right to version 7 avoids confusion.
- "News Archive – 2018: PHP 7.2.9 Released". php.net. 2018-08-16. Retrieved 2018-08-16.
- "PHP: rfc:size_t_and_int64_next". php.net. Retrieved 16 December 2014.
- "PHP: rfc:abstract_syntax_tree". php.net. Retrieved 16 December 2014.
- "PHP: rfc:closure_apply". php.net. Retrieved 16 December 2014.
- "PHP: rfc:integer_semantics". php.net. Retrieved 16 December 2014.
- "PHP: rfc:isset_ternary". php.net. Retrieved 16 December 2014.
- "RFC: Unicode Codepoint Escape Syntax". 2014-11-24. Retrieved 2014-12-19.
- "Combined Comparison (Spaceship) Operator". php.net. Retrieved 2015-05-21.
- "PHP RFC: Generator Delegation". php.net. Retrieved 2015-05-21.
- "PHP RFC: Anonymous Classes". php.net. Retrieved 2015-05-21.
- "PHP RFC: Easy User-land CSPRNG". php.net. Retrieved 2015-05-21.
- "PHP RFC: Exceptions in the engine (for PHP 7)". php.net. Retrieved 2015-05-21.
- "PHP RFC: Group Use Declarations". php.net. Retrieved 2015-05-21.
- "PHP: rfc:void_return_type". php.net. 2015-11-09. Retrieved 2015-11-14.
- "PHP: rfc:class_constant_visibility". php.net. 2015-10-27. Retrieved 2015-12-08.
- "PHP: rfc:object-typehint". wiki.php.net.
- "PHP: rfc:libsodium". wiki.php.net.
- "PHP: rfc:allow-abstract-function-override". wiki.php.net.
- "PHP: rfc:parameter-no-type-variance". wiki.php.net.
- "PHP: Supported Versions". php.net.
- "PHP: rfc:flexible_heredoc_nowdoc_syntaxes". wiki.php.net.
- "PHP: rfc:list_reference_assignment". wiki.php.net.
- "PHP: rfc:pcre2-migration". wiki.php.net.
- "PHP: hrtime - Manual". php.net.
- "PHP: Supported Versions". php.net.
- "PHP: todo:php80". wiki.php.net. Retrieved 2020-06-16.
- "PHP RFC: Explicit octal integer literal notation". wiki.php.net. Retrieved 2020-11-25.
- PHP: PHP tags, PHP, retrieved September 24, 2013
- Your first PHP-enabled page, PHP Manual, retrieved October 08, 2013 Check date values in:
|تاریخ بازبینی=
(help) - Instruction separation, PHP Manual, retrieved October 08, 2013 Check date values in:
|تاریخ بازبینی=
(help) - PHP: Comments, PHP Manual, retrieved October 08, 2013 Check date values in:
|تاریخ بازبینی=
(help) - Alternative syntax for control structures, PHP Manual, retrieved October 08, 2013 Check date values in:
|تاریخ بازبینی=
(help) - Andrew Aksyonoff (March 27, 2007), Integers in PHP, running with scissors, and portability, retrieved October 09, 2013 Check date values in:
|تاریخ بازبینی=
(help) - PHP: Integers, PHP Manual, retrieved October 09, 2013 Check date values in:
|تاریخ بازبینی=
(help) - PHP: Floating point numbers, PHP Manual, retrieved October 09, 2013 Check date values in:
|تاریخ بازبینی=
(help) - PHP: Booleans, PHP Manual, retrieved October 09, 2013 Check date values in:
|تاریخ بازبینی=
(help) - PHP: NULL, PHP Manual, retrieved October 09, 2013 Check date values in:
|تاریخ بازبینی=
(help) - PHP: Reources, PHP Manual, retrieved October 09, 2013 Check date values in:
|تاریخ بازبینی=
(help) - PHP: Arrays, retrieved October 09, 2013 Check date values in:
|تاریخ بازبینی=
(help) - PHP: Strings, PHP Manual, retrieved October 09, 2013 Check date values in:
|تاریخ بازبینی=
(help) - PHP: SPL, PHP, retrieved October 09, 2013 Check date values in:
|تاریخ بازبینی=
(help) - Problems with PHP, ToyKeeper Network, retrieved October 22, 2013
- PHP: Process Control, PHP Manual, retrieved October 22, 2013
- PHP: Functions, PHP Manual, retrieved October 22, 2013
- PHP: Goto, PHP Manual, retrieved October 23, 2013
- PHP: If, w3schools
- Michael Tsai (July 15, 2004), PHP5 Object References, retrieved October 24, 2013
- PHP: Classes and Objects, PHP Manual, retrieved October 30, 2013
- PHP: Object Cloning, PHP Manual, retrieved October 30, 2013
- PHP: Visibility, PHP Manual, retrieved October 30, 2013
- Alejandro Gervasio (June 25, 2008), More on Private Methods with PHP5 Member Visibility, Dev Shed, retrieved October 30, 2013
- Visibility in PHP: Public, Private and Protected, retrieved October 30, 2013
- Scaling PHP with HipHop, FOSDEM 2013, retrieved November 06, 2013 Check date values in:
|تاریخ بازبینی=
(help) - Nick Lindridge, PHP Accelerator 2.1 (Page 3) (PDF), retrieved November 06, 2013 Check date values in:
|تاریخ بازبینی=
(help) - Vote: Integrating Zend Optimizer+ into the PHP distribution, retrieved November 11, 2013
- PHP: APC - Manual, PHP Manual, retrieved November 11, 2013
- GPL-Incompatible Free Software Licenses, GNU, retrieved September 22, 2013
- PHP: General Installation Consideration, PHP Website, retrieved November 28, 2013
- PHP-GTK2 Installation, retrieved December 1, 2013
- PHP-related vulnerabilities on the National Vulnerability Database, September 09, 2013, retrieved November 11, 2013 Check date values in:
|تاریخ=
(help) - Security and... Driving? (and Hiring), January 24, 2006, retrieved November 11, 2013
- Open Enterprise Interview: Ivo Jansch, retrieved November 11, 2013
- Taint support for PHP, PHP Wiki, retrieved November 11, 2013
- Zend Weekly Summaries Issue #368, Zend Devzone, retrieved November 11, 2013