如何在新变量中复制资源并销毁旧资源?

时间:2013-02-11 21:54:29

标签: php resources gd

给出以下代码:

imagecopyresized($new_image, $product, $dst_x, $dst_y, $src_x, $src_y, $dst_width, $dst_height, $src_width, $src_height);

imagedestroy($product);
$product = $new_image;
imagedestroy($new_image);

最后一行会破坏$product,而不只是$new_image,就好像$product是某种指向$new_image的指针一样。为什么会发生这种情况?如何在 $ product 中有效地创建* $ new_image *的副本,然后销毁$new_image资源?

2 个答案:

答案 0 :(得分:1)

$product 是与$new_image相同资源的标识符。使用$product = clone $new_image;获取图像资源的副本。然后,您就可以在不破坏imagedestroy($new_image)的情况下致电$product

答案 1 :(得分:1)

为什么会这样:

PHP使用写时复制内存管理,即您不会在内存中为变量分配新空间 - >只需指向相同的内存位置。

如何避免这种情况:

imagecopyresized($new_image, $product, $dst_x, $dst_y, $src_x, $src_y, $dst_width, $dst_height, $src_width, $src_height);

imagedestroy($product);
$product = clone $new_image;
imagedestroy($new_image);

http://www.php.net/manual/en/language.oop5.cloning.php

关于写时复制: http://www.research.ibm.com/trl/people/mich/pub/200901_popl2009phpsem.pdf