析构函数

伟洪winni 2017-08-31 10:38:28

class MyDestructableClass
{
function __construct()
{
print "In constructor\n";
$this->name = "MyDestructableClass";
}

function __destruct()
{
print "Destroying " . $this->name . "\n";
}

public function A()
{
print "hello A\n";
}
}

echo "<pre>";
$obj = new MyDestructableClass();
$obj->A();

$obj2 = new MyDestructableClass();
$obj2->A();

打印结果

In constructor
hello A
In constructor
hello A
Destroying MyDestructableClass
Destroying MyDestructableClass

文档上写着: 析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
不应该打印下面这种结果?

hello A
In constructor
Destroying MyDestructableClass
hello A
In constructor
Destroying MyDestructableClass
...全文
82 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
u014567183 2017-08-31
  • 打赏
  • 举报
回复
首先,__construct()是在实例化的时候就执行了,不管你调用没调用其中的某个方法,他都执行了。所以 In constructor 然后是你调用的方法被执行 hello A 再然后,这个$obj没有被销毁,你又实例化了一次对象并赋值给$obj2 In constructor 再执行A() hello A 所有的都执行完了,销毁对象 Destroying MyDestructableClass Destroying MyDestructableClass
hongmei85 2017-08-31
  • 打赏
  • 举报
回复
要到php都执行完毕了,这些对象才被删除呀,然后执行__destruct
果酱很好吃 2017-08-31
  • 打赏
  • 举报
回复

$obj = new MyDestructableClass();
$obj->A();
unset($obj);
 
$obj2 = new MyDestructableClass();
$obj2->A();
unset($obj2);
伟洪winni 2017-08-31
  • 打赏
  • 举报
回复
xuzuning 2017-08-31
  • 打赏
  • 举报
回复
$obj2 = new MyDestructableClass();时,另一个实例 $obj 依然存在
MetaQuotes Language 5 (MQL5)是一种高水平编程语言,专为开发技术指标、EA交易和实用应用程序而设计,进而使金融交易自动化。本课程为MT5/MQL5智能交易编程学习,从零基础开始讲解,全面掌握MQL5基础语法,熟练使用MQL5常用函数API,实战开发EA自动化交易程序,从入门到精通,进而能够进行自动交易策略开发,走上EA自动化交易之路。本课程学习过程分为三个阶段:第一阶段、MQL5语言基础学习:通过MQL5语法基础学习,能够快速掌握MetaEditor编辑器使用和基础编程语法,为后续学习MQL5函数API,进行实战学习打下良好基础。内容包括:MT5基本功能介绍、MetaEditor编辑器、基本数据类型、常量和变量、枚举类型、结构体、数组、算数运算符、关系运算符、逻辑运算符、条件判断、循环、函数、类的定义、类的成员变量和函数、类的构造函数、类的析构函数、类的函数重载、类的成员变量的访问权限、类的继承、类的多态、抽象类和纯虚函数。第二阶段:MQL5函数API详解:此阶段为进阶过程,在学习了解MT5交易平台的基础上,掌握如何通过程序获取交易数据、控制交易过程,模拟交易策略,实现自动化交易。内容包括:帮助手册讲解、智能EA指标脚本运行框架、获取账户、客户端、货币信息、获取交易品种信息、获取市场深度信息、获取财经日历信息、K线数据、时间序列、指标访问、获取订单信息、下单、挂单操作、图表窗口操作、图表上画对象、脚本开发实例、指标开发实例、智能EA开发实例、历史数据回测及参数优化、发送邮件、警报、消息提醒、信号订阅、跟单、文件操作、标准程序库。第三阶段:EA交易程序实战:通过前面两个阶段的学习,已经掌握了MT5量化交易编程的基础知识和能力,在实战阶段结合策略交易的关键环节,通过多个实战示例,讲解如何进行仓位管理、风险控制、止盈止损、指标定制等,实现复杂的交易策略逻辑,提高程序自动化交易的实战能力。内容包括:一个简单趋势EA、订单请求合法性校验、三重时间框架、仓位管理、移动止损、移动止盈、隐藏止盈止损价格、风险控制、时间控制、参数控制、展示面板、统计分析、持仓单一键平仓脚本、六类挂单一键取消脚本、按时间标记位置脚本、按价格标记位置脚本、双线一柱变色MACD指标。

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧