PHP 5 به برنامهنویسان این امکان را میدهد تا متدهای سازنده تعریف نمایند کلاسهای دارای متد سازنده در نمونههای جدید آن را فرا میخوانند و برای قرار دادن مقدار اولیه برای اشیا نیازمند مناسب است.
Note: سازندههای والد بصورت خودکار فراخوانی نمیشوند. برای فراخوانی سازنده یک والد یک فراخوانی parent::__construct() به همراه سازنده فرزند فرا میخواند.
Example #1 استفاده از سازنده جدید متحد
<?php
class BaseClass {
function __construct() {
print "In BaseClass constructor\n";
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print "In SubClass constructor\n";
}
}
$obj = new BaseClass();
$obj = new SubClass();
?>
برای تطبیق با نسخههای پیشین اگر PHP 5 تابع __construct() را برای یک کلاس نیابد بدنبال سیوه قدیمی سازندهها خواهد گشت که همنام کلاس است. بطور موثر تنها حالتی که عدم انطباق با نسخههای پیشین پدید میآید وجود متدی همنام با __construct() برای معنای دیگر است.
برخلاف بقیه متدها PHP هنگام بازنویسی __construct() به همراه پارامترهای متفاوتار از __construct() پیام خطای سطح E_STRICT ایجاد نمیکند.
PHP 5 یک مفهوم نابودکننده را مشابه سایر زبانهای شیگرا تعریف مینماید. این نابودکننده به محض از بین رفتن تمام ارجاعات به شی یا فراخوانی نابودکننده بصورت مستقیم خواهد بود یا هر پروسه پایان دهنده دیگر.
Example #2 نمونه نابودکننده
<?php
class MyDestructableClass {
function __construct() {
print "In constructor\n";
$this->name = "MyDestructableClass";
}
function __destruct() {
print "Destroying " . $this->name . "\n";
}
}
$obj = new MyDestructableClass();
?>
همانند سازندهها نابودکنندههای والد بصورت خودکار در موتور فراخوانی نمیشود. برای اجرای سازنده والد باید parent::__destruct() را قطعا در بدنه نابودکننده استفاده میکند.
نابودگر حتی اگر اجرای اسکریپت با استفاده از exit() متوقف شده باشد اجرا خواهد شد. فراخوانی exit() در یک نابودگر روتینهای باقیمانده را از اجرا شدن باز میدارد.
Note:
نابودکنندهها هنگام پایان اسکریپت سرآیند HTTP را که فرستاده میشود خواهد داشت. دایرکتوری اجرایی در اسکریپت پایان فاز میتوانند برای چندین SAPIs (به عنوان نمونه Apache) متفاوت است.
Note:
تلاش برای ایجاد یک استثنا از یک نابودکننده خطای مرگبار ایجاد میکند (فراخوانی در زمان پایان اسکریپت).