<?php
class Teacher
{
private static $_instance;
private $_props = [];
private function __construct(){}
public function __destruct()
{
echo '666';
}
public static function getInstance()
{
if (empty(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
public function setProperty($key, $val)
{
$this->_props[$key] = $val;
}
public function getProperty($key)
{
return $this->_props[$key];
}
}
$t1 = Teacher::getInstance();
$t1->setProperty('name', 'lily');
unset($t1);
//var_dump($t1);
$t2 = Teacher::getInstance();
echo $t2->getProperty('name');
上例代码中虽然unset了$t1但是$t2仍能取到name的值。但如果不是单例模式是动态的对象存储时则不行。
如果在函数中 unset() 一个静态变量,那么在函数内部此静态变量将被销毁。但是,当再次调用此函数时,此静态变量将被复原为上次被销毁之前的值。来源:http://php.net/manual/zh/function.unset.php
所以,我们要注销一个静态变量,需要重新静态定义该变量为null。
参考如下 :
<?php
function test() {
static $test;
$test++;
echo($test . " "); //1
unset($test);
$test = 2;
echo($test . " "); //2
}
test();
test();
test();
输出 :1 2 2 2 3 2
因为每次定义static $test时被销毁的值被重新拿了回来并继续向下+1;而下方的$test在函数结束一次调用后即被销毁。