首页 / PHP / PHP析构函数以及与C析构函数的关系?
PHP析构函数以及与C析构函数的关系?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP析构函数以及与C析构函数的关系?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1835字,纯文字阅读大概需要3分钟。
内容图文
我很难理解在PHP类析构函数中应该做什么
我来自c.
在c中,如果我有这个:
class A{
int n;
~A(){
}
}
class A2{
int* n;
~A2(){
delete n;
}
}
语言知道,如果A的实例超出范围,则应释放其成员n,因为n仅属于该实例.
但是如果A2的实例超出范围,它不知道是否应释放n指向的内存(也许还有其他指向该内存的指针)
但是,如果我们确定如果A2实例超出范围,则要取消分配该内存,则需要手动“删除”它,因为这是我们的意图.
php呢?
我是新来者,并且看到了几种解决方案:
class A3{
private $n;
public function __destruct(){
//Choice 1
unset($this->$n);
//Choice 2
delete $this->$n;
//Choice 3
}
}
我不确定unset和delete之间的区别,但是无论如何.
有人告诉我(参见选择3),如果我们什么都不做,PHP会“自行”释放内存.
但是我不理解析构函数中delete或unset的使用.
我们在php中没有“指针”的概念,因此,如果A3的实例超出范围,自然会释放n.
所以,有什么应该在析构函数中完成的吗?如果不是,那么析构函数中永远不会使用delete或unset?
编辑:基于axiac注释的重写代码
解决方法:
你用C的析构函数写什么?
您可能编写了释放对象生命周期中获取的资源的语句,不是吗?
这在PHP中是相同的,但是在大多数情况下,您不需要在析构函数中放置任何内容,因为未使用的内存和资源会由解释器自动进行垃圾收集.
但是,建议在析构函数中释放在构造函数中获取的资源(或在对象的生存期内),以确保它们使用的内存较早释放或作为文档释放:有人读取析构函数并找到调用它的fclose()知道在构造函数或类的其他方法中,已执行对fopen()的配对调用,并且处理程序存储在对象内部.
附言
> $n行来自:
class A3{
$n
public function __deconstruct(){
是不正确的.它应以分号(;)结尾,并且如果要声明属性,则正确的语法应从可见性说明符之一(私有,受保护或公共)开始,如下所示:
class A3 {
private $n;
public function __destruct() {
>析构函数方法的名称为__destruct(),而不是__destructor().
> PHP中没有删除:http://php.net/manual/en/function.delete.php.
您的三个选择只是一个:选择#1(unset($this-> pdo);).
在PHP中阅读有关classes and objects的更多信息.首先,忘记您对C的大部分了解,因为PHP OOP的工作方式不同,而您对C的了解可能对学习PHP中的OOP有害无益.
内容总结
以上是互联网集市为您收集整理的PHP析构函数以及与C析构函数的关系?全部内容,希望文章能够帮你解决PHP析构函数以及与C析构函数的关系?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。