Hari ini saya berpikir tentang menggunakan PHP untuk menggunakan singleton, dan saya melihat ringkasan yang relatif komprehensif - beberapa implementasi mode singleton dirangkum di dalamnya:
POLOS TEXTPHP:
class MyClass
{
pribadi statis $instance;
fungsi statis publik singleton()
{
if (!isset(self::$instance)) {
$c = __KELAS__;
diri::$instance = baru $c;
}
kembalikan diri::$instance;
}
}
Kode ini sangat tidak nyaman untuk digunakan, karena umumnya diwarisi dari MyClass, dan $c = __CLASS__; Kami hanya dapat mempertimbangkan untuk mencari metode implementasi lain.
Kemudian saya mulai melihat singleton yang diimplementasikan dalam metode fungsi di artikel. Implementasinya sangat bagus. Kerugiannya adalah kelas tidak dapat dipakai dengan parameter. Ini versi saya:
PLAIN TEXTPHP:
function getObj() {
statis $obj = array();
$args = fungsi_get_args();
if(kosong($args))
kembalikan nol;
$clazz = $args[0];
if(!is_object($obj[$clazz])) {
$cnt = hitungan($args);
jika($cnt> 1) {
untuk($i = 1, $s = ''; $i <$cnt; $i++)
$s[] = '$args[' .
eval('$obj[$clazz] = baru $clazz(' . join(',', $s) . ');');
} kalau tidak {
$obj[$clazz] = baru $clazz;
}
}
kembalikan $obj[$clazz];
}
Ini dapat dengan mudah dipanggil di bawah php5:
POLOS TEXTPHP:
getObj('MyClass', $param1
, $param2)->myMethod();
Implementasi sederhana mode monad (SINGLETON)