我有一个PHP类,可以动态创建PNG图像并将其发送到浏览器。 PHP手册说,我需要确保在最后调用imagedestroy函数以释放内存。现在,如果我不使用类,则将有如下代码:
function shutdown_func()
{
global $img;
if ($img)
imagedestroy($img);
}
register_shutdown_function("shutdown_func");
但是,我认为对我的班级来说适当的地方是在班级的析构函数中调用imagedestroy。
我没有发现析构函数是否以关闭函数的相同方式调用?例如,如果在用户按下浏览器中的“停止”按钮时执行停止。
注意:无论您在答案中写什么,都请指向支持它的某些文章或手册页(URL)。
参考方案
我刚刚用Apache测试过,PHP被用作Apache模块。我创建了一个无限循环,如下所示:
<?php
class X
{
function __destruct()
{
$fp = fopen("/var/www/htdocs/dtor.txt", "w+");
fputs($fp, "Destroyed\n");
fclose($fp);
}
};
$obj = new X();
while (true) {
// do nothing
}
?>
这是我发现的:
在Firefox中按STOP按钮不会停止此脚本
如果我关闭Apache,则不会调用析构函数
当到达PHP max_execution_time并且停止调用destuctor时,它将停止
但是,这样做:
<?php
function shutdown_func() {
$fp = fopen("/var/www/htdocs/dtor.txt", "w+");
fputs($fp, "Destroyed2\n");
fclose($fp);
}
register_shutdown_function("shutdown_func");
while (true) {
// do nothing
}
?>
shutdown_func被调用。因此,这意味着类构造器不如关闭函数好。
PHP:获取调用引用的数组名称 - php假定以下函数并调用:function doSomething( &$someArray ) { // Do something to $someArray } $names=array("John", "Paul", "George", "Ringo"); doSomet…
PHP:从函数返回值并直接回显它? - php这可能是一个愚蠢的问题,但是……的PHPfunction get_info() { $something = "test"; return $something; } html<div class="test"><?php echo get_info(); ?></div> 有没有办…
如何在函数(PHP)中使用类的方法? - php我正在尝试使用新的PHP mysqli扩展。我有一个函数(safe())递归使用mysql_real_escape_string使字符串安全。如何在此函数内部使用mysqli连接来调用mysqli :: escape_string()函数?例:$db = new mysqli($host,$user,$password,$database_name); fu…
PHP-将日期插入日期时间字段 - php我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数
返回值与传递对象引用 - php在某个时候,有人建议我,PHP脚本的缓慢可能部分是因为我从函数返回了一个大数组。相反,他建议将对象引用传递给该函数,并使该函数直接在数组上工作。如果这有很大的不同,我正计划将函数样式更改为返回有关函数执行的信息数组(时间基准,尝试等),并直接在对象引用上工作。所以你怎么看? 参考方案 不,没有任何区别。PHP实现了copy-on-write,这意味着即使您将…