При удалении одной переменной GD другая меняет свой тип?

sverel

Новичок
При удалении одной переменной GD другая меняет свой тип?

Это нормально, что при удалении одной переменной, другая меняет тип?

var_dump($small_res); // resource(111) of type (gd)
imagedestroy($res); // Здесь я не трогаю переменную $small_res, а удаляю совсем другую.
var_dump($small_res); // resource(111) of type (Unknown) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
imagedestroy($small_res); // WARNING! imagedestroy(): 111 is not a valid Image resource

P.S.> PHP 5.2.11
 

флоппик

promotor fidei
Команда форума
Партнер клуба
// а потом окажется, что это где то ссылка на нее, на самом деле...

А тебя не смущает, что у них одинаковый номер ресурса?
 

sverel

Новичок
у одной и той же переменной должен быть одинаковый номер ресурса. См. внимательнее

var_dump($small_res); // resource(111) of type (gd)
var_dump($small_res); // resource(111) of type (Unknown)
Это одна и та же переменная. Естественно, и номер будет одинаковый.


Между ними я удаляю переменную $res, а не $small_res
 

sverel

Новичок
хм.. да действительно, у $res тоже ид=111. Но как же так получилось? Метод создания такой:

PHP:
function resize($source) {
    .....
    return $source;
    ....
}

$small_res = resize($res);

Но т.к. $res не передаётся по ссылке, ждолжен был создаться её клон внутри ф-ции и вернуться то же клон. Это же не объект, а resource. Разве ресурсы тоже по ссылке в ф-ции передаются как объекты??? Или тут есть ещё какая-то хитрость?
 

dimagolov

Новичок
Но т.к. $res не передаётся по ссылке, ждолжен был создаться её клон внутри ф-ции и вернуться то же клон. Это же не объект, а resource. Разве ресурсы тоже по ссылке в ф-ции передаются как объекты??? Или тут есть ещё какая-то хитрость?
кто тебе такое сказал, что должен создаться клон, да еще ресурса?
 

LONGMAN

Dark Side of the Moon..
У меня тоже такая проблема. Пишу класс для работы с GD. Суть класса в том что обработать одно изображение и сохранить его разные экземпляры (с ресайз, с эффектамы и т.п.) так чтобы не создать новые объекты класса. То есть на пример:
PHP:
$im = new MyClass('src_img.png');
$img->resize(100, 100);
$img->save('dst_img.jpg');
$img->resize(300, 300);
$img->addShadow();
$img->save('dst_img2.jpg');
Как мне это осушествить?

-~{}~ 26.12.09 21:23:

Жаль что нельзя копировать или клонировать ресурс
 
Сверху