0

给定以下代码:

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资源?

4

2 回答 2

1

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

于 2013-02-11T22:07:26.823 回答
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

于 2013-02-11T22:13:36.813 回答