TypechoJoeTheme

Dcr163的博客

统计

PHP面向对象单例演示

2015-10-18
/
0 评论
/
676 阅读
/
正在检测是否收录...
10/18

/* 单例模式

先看    


注:单例常用也常考,请认真练习
 */
/*
 第一步:一个普通的类
这个普通类,可以new 来实例化
这显然不是单例

class single {
}
$sing1=new single();
$sing2=new single();
$sing3=new single();
*/

/*
第二步:看来new是罪恶之源,干脆不让new 了
我们把构造方法     保护/私有,外部不能new了
---担引出一个问题,不能new,得不到对象,这个不是单例,这个0例
 

class single {
    protected function __construct(){
    }
}
$single=new single();
*/

/*
第三步,通过内部的static 方法来调用

class single {
    protected  $hash;    // 随机码
    
    protected function __construct(){
        $this->hash = mt_rand(1,99966);
    }
    static public function getSingle() {
        return new single();
    }
}

$single1=single::getSingle();
$single2=single::getSingle();

var_dump($single1);
var_dump($single2);
 两个对象什么时间相等?
答:只有指向一个对象地址的时候 */

// 第四步,通过内部的static 方法实例化,并且,把实例保存在内部的静态属性上

class single {
    protected $hash;
    static protected $str=NULL;
     protected function __construct(){
        $this->hash = mt_rand(1,666);
    }
     static public function getSingle(){
        if (self::$str instanceof self) {     //instance 实例of谁的
            return self::$str;                 //专门判断某个对象是不是某个类的实例用的
        }
        self::$str=new single();
         return self::$str;
    }
}
$single1=single::getSingle();
$single2=single::getSingle();
var_dump($single1);
var_dump($single2);
if ($single1==$single2) {
    echo '是同一个对象';
}    else {
    echo '不是同一个对象';
}
echo '<hr />';
//问题来了
class test extends single {
    function __construct(){
        parent::__construct();
    }
}
$test1=new test();
$test2=new test();
var_dump($test1);
var_dump($test2);
//问题1:我们辛苦写的单例,继承一下就不灵了

/*
解决 final 最终的
这个关键词在PHP中,可以修改类,方法名,但不能修饰属性
final 修饰类,则此类,不能被继承

final 修饰方法,此方法不影响继承,但是此方法 不允许重写
*/

/* class Human {
    final public function say() {
        echo '我是中国人!';
    }
    public function show() {
        echo 'hello world';
    }
}
class wHuman extends Human {
}
class minman extends wHuman {
     public function say() {
        echo '你好吗';
    }
}
 */
// final 解决继承更改属性方法问题

朗读
赞(0)
版权属于:

Dcr163的博客

本文链接:

https://dcr163.cn/32.html(转载时请注明本文出处及文章链接)

评论 (0)

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. William Tardent
    2024-02-27
  2. Maryann Hamer
    2024-02-27
  3. Sanora Pantano
    2024-02-24
  4. aa
    2024-02-21
  5. Kassie Baum
    2024-01-28

标签云