سازنده یا Constructor
سازنده تابعی است که در هنگام ایجاد کلاس به صورت اتوماتیک فراخوانی می شود و می توان توسط آن تنظیمات اولیه همانند ایجاد ارتباط با دیتابیس و یا کارهای مشابه را انجام داد.
در PHP 4 سازنده تابعی می باشد که نام آن همان نام کلاس می باشد و در PHP 5 تابعی است که با نام"construct__" می باشد.
مثال1: در مثال زیر به دو روش، تابع سازنده تعریف شده است:
<?php
class className{
function __construct()
{
echo 'className created from PHP5 format';
}
function className()
{
echo 'className created from PHP4 format';
}
}
$a=new className();
؟>
خروجی کد بالا:
اگر در PHP 5 اجرا شود خروجی آن className created from PHP5 format خواهد بود و اگر در PHP 4 اجرا شود خروجی آن className created from PHP4 format خواهد بود.
توجه: در PHP 5 چنانچه تابع construct__ وجود نداشته باشد مدل PHP 4 آن اجرا خواهد شد.
مثال2:
<?php
class My_class
{
public $name;
function __construct($Param="Amir")
{
$this->name=$Param;
}
function SayHello()
{
print "Hello My Name is $this->name"."<br />";
}
}
$obj1=new My_Class();
$obj1->SayHello();
$obj2=new My_Class("Reza");
$obj2->SayHello();
?>
خروجی کد بالا:
Amir
Reza
همانطور که دیدید در مثال بالا یک سازنده ساختیم و مقدار دیفالتش را روی "Amir" گذاشتیم که اگر هیچی وارد نشد این عبارت چاپ بشود.
مخرب یا Destructors
درکنار سازنده مخرب نیز وجود دارد که معکوس سازنده عمل می کند، قبل از، از بین رفتن کلاس اجرا می شود و برای خالی کردن حافظه و یا قطع ارتباط دیتابیس و کارهای مشابه به کار می رود.
در واقع مخرب، زمانی فراخوانی می شود که تمام رفرنس های کلاس مورد نظر رفته اند.
مثال:
<?php class className{
funcrion __construct()
{
echo 'Start of className';
}
function __destruct()
{
echo 'End of className';
}
}
$a=new className();
?>
خروجی کد بالا:
Start of className
End of className
1- سازنده تابعی است هم اسم کلاس که وقتی یک نمونه از کلاس گرفته می شود اتوماتیک فراخوانی می شود.
2- تابع سازنده می تواند دارای پارامتر باشد بنابراين زمان ايجاد شیء می توان به متغيرهای عضو مقادير اوليه داد. برای ارسال آرگومان به تابع سازنده بايد هنگام تعريف شیء مقدار آرگومان بعد از نام شیء درون پرانتز قرار گيرد.
3- یک کلاس می تواند دارای چند سازنده با پارامترهای مختلف باشد. بهتر است همیشه حداقل یک سازنده حتی اگر خالی باشد ساخته شود.
4- برای تابع سازنده مقدار برگشتی ذکر نمی شود.
$conn = new mysqli($servername, $username, $password);
جلو کلاس mysqli 4پارمتر به صورت تابع قرار گرفته است
این چه معنی میدهد؟!
من تاحالا خودم شی به این صورت پارامتر دار از کلاس درست نکرده بودم؟!
یعنی داره از متدسازده استفاده میکند که 4تا پارمتر متدسازنده دریافت میکند درست است؟!
یعنی ما میتونیم هنگام ساخت شی از کلاس آرگومان هایی را به متد سازنده ارسال کنیم!؟
نمیدونم ؛درست نتیجه گیری کردم آِیا؟!
من ارورر سینتکس دارم ممکنه بگید مشکل کجاست
Parse error: syntax error, unexpected 'funcrion' (T_STRING), expecting function (T_FUNCTION) in C:\xampp\htdocs\test\index.php on line 1188
در تعریف تابع شما باید از کلمهی کلیدی function استفاده کنید. این کلمه رو شما اشتباه تایپ کردید!!!
به کلمهی [color=#FF0000]funcrion [/color]دقت کنید! این کلمه رو به function تغییر بدید.
با تشکر
توی مثال مخرب تابع اول مشکل تایپی داره به جای function نوشته funcrion ;)
"توجه: در PHP 5 چنانچه تابع construct__ وجود نداشته باشد مدل PHP 4 آن اجرا خواهد شد."
اگه php4 بود اصلا این تابع سازنده رو نمیشناسه و برنامه خطا میده ؟ یا خود به خود جایگزین میکنه ؟ یا ... ؟
function __construct($Parm="Amir")
{
$this->name=$Param;
}
در تابع سازنده construct__ اسم پارامتر و مقداری که به name دادین یکی نیست . در صفحه قبل هم همینطور بود.
----------------------
در قسمتی که object هم درست کردین خروجی اشتباه ست
$obj1=new My_Class();
$obj1->SayHello();
$obj2=new My_Class("Reza");
$obj1->SayHello();
چون در آخر دوباره SayHello رو از obj1 فراخوانی کردین و obj1 مقدار nameش همون Amir هستش
متشکر