Люди! Ктото знает метод уничтожения экземпляра класса?

ONK

Пассивист PHPСluba
Автор оригинала: StUV
:)
понял...
типа несуществующая переменная проставленная в аргументе функции считается существующей...

вдимо разработчики уделяли больше внимания на безопасность etc, чем на целостность языка
Не совсем, это относится только к ссылкам!

Видимо разработчики пытались упростить жизнь ламерам, из-за этого у меня были пару раз трудно уловимые ошибки.
 

StUV

Rotaredom
прикол:

PHP:
  function XXX(&$x)
  {
    $x.="qqqqqqq";
    echo $x;
  }

  XXX($qwerty);
типа переменная создается и инициализируется нулевым значением при передаче ее по ссылке в функцию :)...
 

ONK

Пассивист PHPСluba
О чём я и говорю..

function XXX(&$x)
{
$x++;
echo $x .="qqqqqqq";
}

XXX($qwerty);


А насчёт unset(), видимо не стоит пытаться уничтожать переменные по ссылке на них.
 

Crazy

Developer
У меня unset(); уничтожает пременные сразу и память освобждает тоже сразу, с итересом потестирвал бы пример где unset(); работает подругому.
Пример я уже приведен выше. Unset уничтожит переменную и ее значение -- ссылку. А объект останется на месте. Даю конкретный код, который можно запустить и проверить:

PHP:
<?php

class Foo {
  var $x;
  function Foo($x) {
    $this->x = $x;
  }
  function get_x() {
    return $this->x;
  }
  function set_x($x) {
    $this->x = $x;
  }
}

$a = new Foo(1);
$b =& $a;
$b->set_x(2);
unset($b);
echo $a->get_x();

?>
 

StUV

Rotaredom
2Crazy:
твой пример понятен (где-то в мане кажется эта ситуация описана)
то есть в моем примере в функции создается объект == ссылка на передаваемый объект, с ним производятся манипуляции, и в случае с unset - этот новый объект ансетится, а первоначальный объект остается...
так ?
 

ONK

Пассивист PHPСluba
Автор оригинала: Crazy
Пример я уже приведен выше. Unset уничтожит переменную и ее значение -- ссылку. А объект останется на месте. Даю конкретный код, который можно запустить и проверить:

PHP:
<?php

class Foo {
  var $x;
  function Foo($x) {
    $this->x = $x;
  }
  function get_x() {
    return $this->x;
  }
  function set_x($x) {
    $this->x = $x;
  }
}

$a = new Foo(1);
$b =& $a;
$b->set_x(2);
unset($b);
echo $a->get_x();

?>
Одно дело иничтожать ссылку, а другое дело уничтожать сам объект, вот сделай unset($a); и всё будет правильно :).

Понятное дело что при уничтожении ссылки много памяти не освободится :).
 

Crazy

Developer
Автор оригинала: StUV
типа переменная создается и инициализируется нулевым значением при передаче ее по ссылке в функцию :)...
Если мне не изменяет мой склероз, после обработки Encoder'ом эта фича исчезает.
 

Crazy

Developer
Автор оригинала: StUV
можно на мои вопросы что-нить ?
спасибо
Сложно однозначно интерпретировать вопрос. Если ты задашь его с точной ссылкой на исходник, то я попробую ответить.
 

Screjet

Новичок
2ALL
{переменная} != {ссылка на эту переменную}
{значение переменной} == {значение по ссылке на эту переменную}
PHP:
global $x;
$a = & $b;
переменная $x и $a ЯВЛЯЕТСЯ новой переменной, значение которой ЯВЛЯЕТСЯ соответсвенно $GLOBAL['x'] и $b. С global похоже это не глюк, просто при объявлении ссылки на несуществующую переменную, эта ссылка является NULL, т.к. смысла нет указателя на NULL :).
 

Screjet

Новичок
Автор оригинала: ONK
У меня unset(); уничтожает пременные сразу и память освобждает тоже сразу, с итересом потестирвал бы пример где unset(); работает подругому.
Как ты определяешь, что память освобождена?
попробуй такой код:
PHP:
require('PEAR.php');

$c = 40000;

while ($c--){

    $a = new PEAR();
    unset($a);

}

echo "end\n";
sleep(10);
и такой код
PHP:
$c = 400000;

while ($c--){

    $a->a = 'asdwdeewddewdxewfwfwfefwfasfdafe';
    $a->b = 'qwxqewdxewfdwefqwferwwqwwqopopop';
    $a->c = $a->a . $a->b;
    unset($a);

}

echo "end\n";
sleep(10);
и 10 сек на то, чтоб проверить память
 

Frol

Новичок
>А ZE 2.0 + Функция Delete не пробовали?!
young, а ты сам не пробывал? или еще скажи, что ты скрипты на нем пишешь? ;)
 

ONK

Пассивист PHPСluba
Screjet , попытался прогнать твои и другие подобные тесты, странно ведёт себя ПХП 4.3, самый большой размер у апача до момента создания объекта. При создании первого объекта тестируемого класса происходит падение объёма занимаемой памяти и так до самого конца теста (в момент исполнения цикла апач тоже неизменен в размере).
 

Screjet

Новичок
Автор оригинала: ONK
Screjet , попытался прогнать твои и другие подобные тесты, странно ведёт себя ПХП 4.3, самый большой размер у апача до момента создания объекта. При создании первого объекта тестируемого класса происходит падение объёма занимаемой памяти и так до самого конца теста (в момент исполнения цикла апач тоже неизменен в размере).
Такого не бывает :)
Может ты спутал со свободной памятью?
Любой процесс забирает под себя память, и, в идеальном случае, занимаемый объем памяти остается неизменным (т.е. в процессе память освобождается и используется вновь), по завершению процесса память, занимаемая Zend, например, освобождается..
 

young

Новичок
>А ZE 2.0 + Функция Delete не пробовали?!
young, а ты сам не пробывал? или еще скажи, что ты скрипты на нем пишешь?
Пишу, и скажу что один из production-server работает уже пол года под ZE 2.0 И я пока не жалуюсь :)
 

Screjet

Новичок
Люди! Все, кажись разобрался..
в первом тесте попробуйте вместо
PHP:
$a = new PEAR();
unset($a);
вот такое чудо :)
PHP:
$a = & new PEAR();
$a = NULL;
проверьте расход памяти, и все сразу станет ясно :D
 
Сверху