كنت أفكر اليوم في استخدام PHP لاستخدام المفرد، ورأيت ملخصًا شاملاً نسبيًا - تم تلخيص العديد من تطبيقات الوضع المفرد في PHP5:
PLAIN TEXTPHP:
class MyClass
{
مثيل $ ثابت خاص؛
دالة ثابتة عامة مفردة ()
{
إذا (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
إرجاع الذات::$instance;
}
}
هذا الرمز ليس مريحًا جدًا في الاستخدام، لأنه موروث بشكل عام من MyClass، ويحصل $c = __CLASS__ دائمًا على اسم الفئة للفئة الأساسية، وهو غير متوفر. يمكننا فقط التفكير في إيجاد طرق تنفيذ أخرى.
ثم بدأت في إلقاء نظرة على المفردة التي تم تنفيذها في طريقة الوظيفة في المقالة. وكان التنفيذ جيدًا جدًا. والعيب هو أنه لا يمكن إنشاء مثيل للفئة باستخدام
المعلمات
.
ثابت $obj = array();
$args = func_get_args();
إذا (فارغة($args))
عودة فارغة؛
$clazz = $args[0];
إذا(!is_object($obj[$clazz])) {
$cnt = العد($args);
إذا($cnt> 1) {
for($i = 1, $s = ''; $i <$cnt; $i++)
$s[] = '$args[' $i ']';
eval('$obj[$clazz] = new $clazz(' . join(',', $s) .');');
} آخر {
$obj[$clazz] = جديد $clazz;
}
}
إرجاع $obj[$clazz];
}
يمكن استدعاؤه بسهولة ضمن php5:
PLAIN TEXTPHP:
getObj('MyClass', $param1, $param2)->myMethod()
;
تنفيذ بسيط للوضع الأحادي (SINGLETON)