PHP之单例模式

final关键字:
不能使用final标识成员属性。
使用final标识的类,不能被继承。
如:final class Test{},Test类不能被继承。
在类中使用final标识的成员方法,在子类中不能被覆盖。

static关键字:
可以将类中的成员标识为静态的,既可以用来标识成员属性,也可以用来标识成员方法。
static成员总是唯一存在的,在多个对象之间共享的。使用static标识的成员是属于类的,所以与对象实例和其它的类无关。
类中的静态成员是不需要对象而使用类名来直接访问的。
类外访问时:
self::静态成员属性名
self::静态成员方法名
类中访问时:
self::静态成员属性名
self::静态成员方法名
静态方法只能访问静态成员。
可以使用类名或self在非静态方法中访问静态成员。

instanceof关键字:
确定一个对象是类的实例、类的子类,还是实现了某个特定的借口,并进行相应的操作。
$dog = new Animal();
if ($man instanceof Animal)
{
    echo '$man是Animal类的实例对象';
}

clone关键字:
根据现有的对象克隆出一个完全一样的对象,克隆以后,原本和副本两个对象完全独立,互不干扰。

魔术方法__clone():
该方法是在对象克隆自动调用的,不需要任何参数,该方法中自动包含$this和$that两个对象的引用,
$this是副本对象的引用,而$that则是原本对象的引用。
<?php
class Single
{
    public $hash;
    static private $ins = null;
    final protected function __construct()
    {
        $this->hash = mt_rand(1, 999999);
    }
 
    static public function getInstance()
    {
        if (self::$ins instanceof self)
        {
            return self::$ins;
        }
        self::$ins = new self();
        return self::$ins;
    }
    private function __clone()  
    {
        return self::$ins;
    }
}

$s = Single::getInstance();
$s1 = Single::getInstance();

if ($s === $s1)
{
    echo 'equal';
}
else  
{
    echo 'not equal';
}
 
echo '<hr />';
 
class Other extends Single   //继承
{
 
}
 
$t1 = Other::getInstance();
$t2 = Other::getInstance();
if ($t1 === $t2)
{
    echo 'equal';
}
else  
{
    echo 'not equal';
}
echo '<hr />';
 
$t3 = clone $t2;  // 克隆,得到的是一个新对象
//var_dump($t3, $t2);   
 
if ($t3 === $t2)
{
    echo 'equal<br />';
}
else  
{
    echo 't3 and t2 not equal';
}
?> 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值