گاهی اوقات ما نیاز داریم که فقط یک شی از یک کلاس ایجاد بشه و اجازه ساخت شی جدیدی داده نشه, که در اینگونه موارد از اگوی طراحی Singleton استفاده میکنیم.
فرض کنید میخواهیم یک شی از کلاس Request ایجاد کنیم که در هنگام ورود کاربر به سایت آی پی و مرورگر کاربر را نگه میدارد.
برای این که از کلاس Request فقط اجازه ساختن یک شی داشته باشیم, در ابتدا متد __construct را private میکنیم تا اجازه ساختن شی بیرون از کلاس وجود نداشته باشد حال یک متغیر استاتیک به اسم instance تعریف میکنیم و مقدار آن را null قرار میدهیم و یک متد استاتیک ایجاد میکنیم که وظیفه آن ایجاد شی جدید است و درون آن بررسی میکنیم که اگر مقدار instance برابر با null بود یک شی از کلاس Request ایجاد کند و مقدار آن را درون متغیر instance قرار میدهد و در غیر این صورت متغیر instance را برمیگرداند.به کد زیر نگاه کنید تا متوجه شوید
class Request {
private static $instance = null; public $ip; public $agent;
private function __construct() { $this->ip = $_SERVER["REMOTE_ADDR"]; $this->agent = $_SERVER["HTTP_USER_AGENT"]; } public static function get_instance() : Request { if(self::$instance == null){ self::instance = new Request; } return self::instance; }
}