📌 هدف: این الگو تضمین میکند که از یک کلاس فقط یک نمونه (Instance) در کل برنامه وجود داشته باشد و همه بخشهای برنامه از همان نمونه استفاده کنند.
✅ زمانی که باید فقط یک شیء از یک کلاس در کل برنامه وجود داشته باشد.
✅ برای مدیریت منابعی مثل اتصال به دیتابیس، لاگگیری، تنظیمات برنامه و …
✅ وقتی میخواهیم دسترسی جهانی (Global Access) به یک شیء داشته باشیم.
class Singleton { private static ?Singleton $instance = null; // متغیر استاتیک برای ذخیره نمونه کلاس private function __construct() {} // جلوگیری از ایجاد نمونه جدید private function __clone() {} // جلوگیری از کلون کردن شیء private function __wakeup() {} // جلوگیری از unserialize شدن public static function getInstance(): Singleton { if (self::$instance === null) { self::$instance = new Singleton(); } return self::$instance; } } // استفاده از Singleton $object1 = Singleton::getInstance(); $object2 = Singleton::getInstance(); var_dump($object1 === $object2); // خروجی: true
🔹 در این کد، هر بار که getInstance() را صدا بزنیم، همان نمونه قبلی برمیگردد و نمیتوان نمونه جدیدی ایجاد کرد.
✅ مزایا:
❌ معایب: