سازنده کلاس در PHP
سازنده یا 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
- نوشته شده توسط امیر پهلوان صادق
- بازدید: 23012
دیدگاهها
سلام ببخشید من مفهوم متد سازنده را درک نکردم میشه بیشتر توضیح دهید .اگراز متد سازنده استفاده نکنیم چه اتفاقی و اگر استفاده کنید چه اتفاقی رخ می دهد .مرسی
سلام
1- سازنده تابعی است هم اسم کلاس که وقتی یک نمونه از کلاس گرفته می شود اتوماتیک فراخوانی می شود.
2- تابع سازنده می تواند دارای پارامتر باشد بنابراين زمان ايجاد شیء می توان به متغيرهای عضو مقادير اوليه داد. برای ارسال آرگومان به تابع سازنده بايد هنگام تعريف شیء مقدار آرگومان بعد از نام شیء درون پرانتز قرار گيرد.
3- یک کلاس می تواند دارای چند سازنده با پارامترهای مختلف باشد. بهتر است همیشه حداقل یک سازنده حتی اگر خالی باشد ساخته شود.
4- برای تابع سازنده مقدار برگشتی ذکر نمی شود.
تو موقع تعریف یک شی از کلاس زیر دقت کنید
$conn = new mysqli($servern ame, $username, $password);
جلو کلاس mysqli 4پارمتر به صورت تابع قرار گرفته است
این چه معنی میدهد؟!
من تاحالا خودم شی به این صورت پارامتر دار از کلاس درست نکرده بودم؟!
یعنی داره از متدسازده استفاده میکند که 4تا پارمتر متدسازنده دریافت میکند درست است؟!
یعنی ما میتونیم هنگام ساخت شی از کلاس آرگومان هایی را به متد سازنده ارسال کنیم!؟
نمیدونم ؛درست نتیجه گیری کردم آِیا؟!
تو مثال بالا : مخرب یا Destructors
من ارورر سینتکس دارم ممکنه بگید مشکل کجاست
Parse error: syntax error, unexpected 'funcrion' (T_STRING), expecting function (T_FUNCTION) in C:\xampp\htdocs \test\index.php on line 1188
با سلام و تشکر.
در تعریف تابع شما باید از کلمهی کلیدی function استفاده کنید. این کلمه رو شما اشتباه تایپ کردید!!!
به کلمهی funcrion دقت کنید! این کلمه رو به function تغییر بدید.
ممکنه یه آموزش درباره چگونگی بررسی ارورر های php بزارید
به لینک http://beyamooz.com/php/81-advance/74-%D8%B1%D8%B3%DB%8C%D8%AF%DA%AF%DB%8C-%D8%A8%D9%87-%D8%AE%D8%B7%D8%A7%D9%87%D8%A7-%D8%AF%D8%B1-php یه سری بزنید.
با تشکر
سلام
توی مثال مخرب تابع اول مشکل تایپی داره به جای function نوشته funcrion ;)
سلام.درمثال 2 خط 4 یک var یا private یا public باید در اول ان برای تعریف متغییر باشد.
سلام، ممنون اصلاح شد.
لطفا در مورد نکته زیر که گفتید یکم بیشتر توضیح بدید ، کامل مطلب رو درک نکردم .
"توجه: در PHP 5 چنانچه تابع construct__ وجود نداشته باشد مدل PHP 4 آن اجرا خواهد شد."
اگه php4 بود اصلا این تابع سازنده رو نمیشناسه و برنامه خطا میده ؟ یا خود به خود جایگزین میکنه ؟ یا ... ؟
با تصور اینکه هر دو روش سازنده یا Constructor را در کدتان استفاده کرده باشید، این جمله معنی پیدا می کنه.
سلام به نظرم چند تا اشتباه تایپی در مثال 2 وجود داره
function __construct($Pa rm="Amir")
{
$this->name=$Pa ram;
}
در تابع سازنده construct__ اسم پارامتر و مقداری که به name دادین یکی نیست . در صفحه قبل هم همینطور بود.
----------------------
در قسمتی که object هم درست کردین خروجی اشتباه ست
$obj1=new My_Class();
$obj1->SayHello();
$obj2=new My_Class("Reza");
$obj1->SayHello();
چون در آخر دوباره SayHello رو از obj1 فراخوانی کردین و obj1 مقدار nameش همون Amir هستش
سلام، کاملاً حق با شماست. هر دو مورد اصلاح شد.
متشکر