首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

php魔术方法之

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出换行线(属于线上触发)

解释:在代码运行完自动释放内存之前由于对象已经没有被任何变量引用所以就自动释放了内存....答案是在线上触发

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190126G14BA000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券