php构造函数:__construct和析构函数:__destruct
class James
{
private static $count = 0;
function __construct()
{
self::$count++;
}
function __destruct()
{
self::$count–;
}
function getCount()
{
return self::$count;
}
}
//第一次实例化
$j = new James();
调用构造函数输出:1
var_dump($j->getCount());
//第二次实例化
$j = new James();
调用构造函数输出:2
var_dump($j->getCount());
//销毁
对象的销毁:
显试销毁: 当对象没有被引用时就被销毁(下面第二种情况),所以我们可以unset或为其赋NULL;
隐试销毁:PHP是脚本语言,在代码执行完最后一行时(下面第一种情况),所有申请的内存都要释放掉.
第一种情况:
$b = $j; //将$j赋值给$a
unset($j); //销毁$j
var_dump($j->getCount()); 输出2
echo '';
//先输出换行线再等程序执行完后释放内存调用析构函数(属于线下触发)
解释:$b = $j;默认引用传值,两个变量指向同一处内存,unset的时候对象还是被其它1个变量使用,所以对象并没有被销毁,所以析构函数是在线下触发的(代码执行完了,内存自动释放)
第二中情况:
unset($j); //销毁$j
echo '';
//先执行了析构函数再echo出换行线(属于线上触发)
解释:在代码运行完自动释放内存之前由于对象已经没有被任何变量引用所以就自动释放了内存....答案是在线上触发
领取专属 10元无门槛券
私享最新 技术干货