camka
не самка
РНР5:: Удаление по ссылке не работает
Для примера рассматриваю простой двусвязный список, каждый элемент которого имеет ссылку на предществующий и последующий элемент.
Использование нововведения пхп5, где по умолчанию объекты всегда передаются по ссылке, сразу отпало, поскольку при обнулении объекта, на который ссылаются другие объекты обнуляет лишь сам удаляемый объект, а все ссылки на него продолжают жить, как ни в чем не бывало.
Поэтому везде использую синтаксис присвоения по ссылке.
Однако, это не спасает. В приведенном примере ссылка на родителя у ссылки потомка остается живой, хотя по логике вещей должна обнуляться.
Я продолжаю грешить на неполноценность$this объкта внутри класса. Он все портит, поскольку является, насколько я знаю, некой временной сущностью.
Единственным решением пока нахожу передачу самого объекта по ссылке в функцию добавления потомка: т.е.
Вопрос, можно ли это решить как-то более эллегантным способом.
спасибо
Для примера рассматриваю простой двусвязный список, каждый элемент которого имеет ссылку на предществующий и последующий элемент.
PHP:
<?php
class uga
{
public $parent = null;
public $child = null;
public $text;
public function __construct($text)
{
$this->text = $text;
}
public function &add_child($text)
{
$this->child = new self($text);
$this->child->parent = &$this;
return $this->child;
}
public function delete()
{
$tmp = &$this;
$tmp = null;
}
}
$node = new uga('root');
$first_child = &$node->add_child('first_child');
$node = null;
echo '<pre>';
print_r($node);
echo "================\n";
print_r($first_child);
echo '</pre>';
?>
Поэтому везде использую синтаксис присвоения по ссылке.
Однако, это не спасает. В приведенном примере ссылка на родителя у ссылки потомка остается живой, хотя по логике вещей должна обнуляться.
Я продолжаю грешить на неполноценность$this объкта внутри класса. Он все портит, поскольку является, насколько я знаю, некой временной сущностью.
Единственным решением пока нахожу передачу самого объекта по ссылке в функцию добавления потомка: т.е.
PHP:
public static function &add_child($text, &$parent)
{
$parent->child = new self($text);
$parent->child->parent = &$parent;
return $this->child;
}
спасибо


