我已经在PHP中完成了一些项目,但我仍然远没有成为专家。我现在正在尝试调试其他人编写的应用程序。PHP难以理解的控制流程
在代码中有一点我不能理解,而且我没有想法。这里是一些背景信息。
代码应该检索PDF文件并使用 内部div
中显示的PDF文件来呈现页面。对于某些文件这可以工作。对于其他文档,将PDF文件发送到客户端(浏览器下载对话框打开)并且不显示页面。
我已经添加了很多fwrite
以在页面呈现时将某些操作记录到日志文件中。令我惊讶的是,我有以下情况:
fwrite($fh, "HERE3\n");
$templateMgr =& TemplateManager::getManager();
fwrite($fh, "HERE4\n");
页面时正确地呈现,两条线(“HERE3”和“HERE4”)被记录。 当页面完全不呈现并且PDF文件被发送下载时,仅记录“HERE3”。
令我百思不解的是如何也可能会发生:没有如果或两个日志行之间的回报!对于没有记录第二行的代码,我唯一的解释是它在记录“HERE3”后崩溃。但后来,我希望两者中任选一种:
- 代码记录两条线,并持续到年底,并呈现页面(OK),或
- 的代码只记录的第一行,然后死机不生产任何输出。相反,该程序会向客户端发送一个PDF文件。
我也记录了getManager()的调用,并且它没有崩溃地返回。
所以,我的问题是,这个代码如何在函数调用后中断执行,然后产生有意义的输出?
如果不知道getManager是干什么的,就不能给出答案。 – 2014-11-02 21:30:18
@WvanRij:但是子程序是否可以跳过脚本的其余部分并仍然产生响应?无论如何,getManager()首先会尝试从注册表中检索一个对象,如果它找不到它,它会创建一个新对象。构造函数非常复杂,我仍然试图理解它。但是,一个子程序如何跳过脚本的其余部分并仍然产生输出? – Giorgio 2014-11-02 21:33:27
@Giorgio php脚本中的任何地方都可以调用'die;'或'exit;'并且执行将在那一刻停止。 – 2014-11-02 21:42:45