كنترل پنل             جستجو               پرسشهای متداول            .:: آخرین پست‌های انجمن ::.            لیست اعضا            مدیران سایت             درجات        ورود
فهرست انجمن‌ها -> برنامه‌نويسي تحت وب -> زبان برنامه‌نويسي PHP
پاسخ دادن به این موضوع
Singleton pattern
پست تاریخ: چهار‌شنبه 17 دی 1393 - 14:38    
bidak
داره كولاك مي‌كنه!
داره كولاك مي‌كنه!


پست: 121
عضو شده در: 29 تیر 1392

blank.gif


امتياز: 1376

عنوان: Singleton pattern خواندن مشخصات فردی ارسال پیام شخصی ارسال email

سلام.
قبلا مطلبی نوشتم در این لینک, که در اینکلود کردن فایل هاتون به مشکل نخورید.
این مشکل در ساخت آبجکت از یک کلاس هم وجود داره.

در جاهای مختلف پروژه ما از یک کلاس , آبجکتی میسازیم و ممکنه چندین بار در پروژه عمل new کردن و ساختن یک آبجکت از کلاس رو انجام داده باشیم , ولی ما در هر بار اجرای اسکریپت نیاز به ساخت یک آبجکت از کلاس داریم و نمیخوایم چندین بار در پروژه از یک کلاس , آبجکت ساخته بشه.

برای حل این مشکل از معماری Singleton استفاده میکنیم.
با استفاده از این معماری , دیگه نیاز نیست به فکر چند بار آبجکت ساختن , باشیم و با خیال راحت در همه ی جای پروژه , آبجکتی از کلاس میسازیم و تنها در صورت وجود نداشتن شی ء , آبجکت جدید ساخته میشه.

در کلاسی که میخوایم از معماری Singleton استفاده کنیم , کافیه یک متد static بسازیم.
یک نمونه از معماری در کلاس دیتابیسمون:
کد:

class Database
{
    private static $instance;
 
    public function __construct()
    {
       // connection
    }
 
    // Singleton Design Pattern
    public static function getInstance()
    {
        if(self::$instance === null)
        {
            self::$instance = new Database();
        }
        return self::$instance;
    }
}


* متد های static , مانند function های خارج از کلاس هستن و برای فراخوانی آبجکتی نمیسازیم.

حالا برای صدا زدن کلاس , در پروژه متد getInstance رو صدا بزنیم.به این صورت:
کد:

// this is an object of db class
$obj = Database::getInstance();


* متد های static برای صدا زدن , اول نام کلاس مربوطه میاد و بعد از ( :: ) , نام متد.

اگر چندین بار پشت سر هم صدا بزنید , باز هم یک آبجکت ساخته میشه.بخاطر وجود این شرط:
کد:

if(self::$instance === null)


روش دیگری برای پیاده سازی این معماری:
کد:

class Singleton
{
    private static $instance;
    public function __construct()
    {
        if(!self::$instance)
        {
            self::$instance = $this;
            echo 'a new object is created...';
        }
        return self::$instance;
    }
}

$obj1 = new Singleton();
$obj2 = new Singleton();
$obj3 = new Singleton();
$obj4 = new Singleton();
$obj5 = new Singleton();


اینجا چون کدهای مربطه رو در constructor نوشتیم , در هر بار new اولین کدهایی که اجرا میشن , کدهای سازنده (constructor) هستن , یعنی با هربار new کردن کلاس , متد constructor صدا زده میشه.

* در تمام new کردن ها ازین کلاس , تنها یکبار , آبجکت ساخته میشه.

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: چهار‌شنبه 17 دی 1393 - 16:59    
mahnazSALAS
داره كولاك مي‌كنه!
داره كولاك مي‌كنه!


پست: 355
عضو شده در: 13 مهر 1393
محل سکونت: ساوه
iran.gif


امتياز: 4890

عنوان: پاسخ به «Singleton pattern» خواندن مشخصات فردی ارسال پیام شخصی ارسال email

برادر bidak,
خیلی خوب بود با اینکه برنامه نویسیم خیلی ضعیفه Embarassed اما مطالبه آموزشیت به نظرم خوب بود آفرين

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 


این مطلب آخرین بار توسط mahnazSALAS در چهار‌شنبه 17 دی 1393 - 17:11 ، و در مجموع 1 بار ویرایش شده است.
تشکرها از این پست:


نمایش پستها:                 مشاهده موضوع قبلی :: مشاهده موضوع بعدی  
پاسخ دادن به این موضوع
 

صفحه 1 از 1

تمام زمانها بر حسب GMT + 3.5 Hours می‌باشند
 Related Topics 


 information 

 

پرش به:  
شما نمی توانید در این بخش موضوع جدید پست کنید
شما نمی توانید در این بخش به موضوعها پاسخ دهید
شما نمی توانید موضوع های خودتان را در این بخش ویرایش کنید
شما نمی توانید موضوع های خودتان را در این بخش حذف کنید
شما نمی توانید در این بخش رای دهید


Copyright 2004-2024. All rights reserved.
© by Aftabgardan Cultural Center : Aftab.cc