标签:empty 信息 实例化 实现 stat cte nbsp highlight var_dump
1:
<?php
class test{
protected function __construct(){
}
}
$test = new test();
?>
然后执行以下,就会出现这个情况。
这样的话,就不能实例化了。这样就保证不能随便让人给实例化了。<?php
class test{
protected function __construct(){
}
public static function getInstance(){
$_test = new test();
return $_test;
}
}
$test = test::getInstance();
var_dump($test);
?>
<?php
class test{
protected function __construct(){
}
public static function getInstance(){
static $_test;
if (empty($_test)) {
$_test = new test();
}
return $_test;
}
}
$test1 = test::getInstance();
$test2 = test::getInstance();
$test3 = test::getInstance();
var_dump($test1,$test2,$test3);
echo $test1 == $test2 ? ‘true‘ : ‘false‘;
echo "<br>";
echo $test2 == $test3 ? ‘true‘ : ‘false‘;
echo "<br>";
echo $test1 == $test3 ? ‘true‘ : ‘false‘;
?>
/*
单例设计模式 (单态)
定义: 一个类 只能允许有 一个对象存在.
1.不让进: 使类不能被实例化
2.留后门: 设置静态方法
3.给对象: 在静态方法里实例化该类
4.判初夜: 判断是否是 第一次产生该类的对象
5.设静态: 静态方法里 要使用静态属性
*/
/*//1.不让进: 使类不能被实例化-----------------
class Test
{
// 设置 一个封装的构造方法
private function __construct()
{
//占位, 我就是不让你NEW我~~~
}
}*/
/*//2.留后门: 设置静态方法--------------------
class Test
{
// 设置 一个封装的构造方法
private function __construct()
{
//占位, 我就是不让你NEW我~~~
}
//后门
public static function getObject()
{
echo "啊,我是后门,进吧!<br>";
}
}*/
/*//3.给对象: 在静态方法里实例化该类------------------
class Test
{
// 设置 一个封装的构造方法
private function __construct()
{
//占位, 我就是不让你NEW我~~~
}
//后门
public static function getObject()
{
echo "啊,我是后门,进吧!<br>";
return new self();//实例化一个对象给你
}
}*/
/*//4.判初夜: 判断是否是 第一次产生该类的对象------------------
class Test
{
private $obj = null;//属性值为对象,默认为null
// 设置 一个封装的构造方法
private function __construct()
{
//占位, 我就是不让你NEW我~~~
}
//后门
public static function getObject()
{
echo "啊,我是后门,进吧!<br>";
if ($this->obj === null) {
$this->obj = new self();//实例化一个对象
}
//返回的属性 其实就是本对象
return $this->obj;
}
}*/
//5.设静态: 静态方法里 要使用静态属性------------------
class Test
{
private static $obj = null;//属性值为对象,默认为null
// 设置 一个封装的构造方法
private function __construct()
{
//占位, 我就是不让你NEW我~~~
}
//后门
public static function getObject()
{
echo "啊,我是后门,进吧!<br>";
if (self::$obj === null) {
self::$obj = new self();//实例化一个对象
}
//返回的属性 其实就是本对象
return self::$obj;
}
}
/*Test::getObject();//使用静态方法访问该类里的方法
exit;*/
$t1 = Test::getObject();
$t2 = Test::getObject();
$t3 = Test::getObject();
$t4 = Test::getObject();
$t5 = Test::getObject();
$t6 = Test::getObject();
$t7 = Test::getObject();
$t8 = Test::getObject();
//判断 两个对象 是否是同一个对象
if ($t1 === $t6) {
echo "哦, Yes! 是同一个实例<br>";
} else {
echo "哦, No! 不是同一个实例<br>";
}
标签:empty 信息 实例化 实现 stat cte nbsp highlight var_dump
原文地址:http://www.cnblogs.com/zyjfire/p/6760129.html