最近为了解决一个问题,需要写一个PHP的单例模式的类,以前也小有研究,其实项目中包括框架自身许多地方也是使用的单例模式,但没自己写过,于是自己随手写了一个实现单机模式的简单类。
namespace frontend\models;
class TestInstance
{
public static $_instance = null;
public static $_count=0;//用来计数实例化的次数
protected function __Construct()
{
echo 'Instance,Instance,Instance..........';
echo "
";
}
public static function getInstance()
{
if(!isset(self::$_instance)){
self::$_count++;//实例化次数+1,测试单例
self::$_instance = new static();
}
return self::$_instance;
}
public function haha()
{
echo 'hahahahhahahha.......';
echo "
";
}
public function count()
{
echo self::$_count;
echo "
";
}
}
调用:
namespace frontend\controllers;
use yii;
use yii\web\Controller;
use frontend\models\TestInstance;
class TestController extends Controller
{
public function actionHehe()
{
$aaa = TestInstance::getInstance();
$aaa->haha();
$aaa->count();
$bbb = TestInstance::getInstance();
$bbb->haha();
$bbb->count();
$ccc = TestInstance::getInstance();
$ccc->haha();
$ccc->count();
exit;
return $this->render('hehe');
}
}
输出:
Instance,Instance,Instance……….
hahahahhahahha…….
1
hahahahhahahha…….
1
hahahahhahahha…….
1
当然,这只是一个PHP单例模式最简单的示例,在Yii2框架上测试。完整的和更多细节考虑的可以参考网上别人写的,或者很多PHP框架自身实现的单例模式的类。