Profic
just Profic (PHP5 BetaTeam)
[php5] оператор [] на свойствах класса, наследованного от DOMDocument
Код
выводит
Обратите внимание на 1 и 2 случай и не комментарий. Кто это думает по этому поводу? В базе багов php ничего не нашел. Правда я не силен в ихнем поиске 
PHP-5.0.0RC3/xdebug-2.0.0dev (последний точно виноват - проверял).
-~{}~ 19.06.04 15:24:
ЗЫ. Да кстати ни прямое указание индекса при присвоении, ни использование array_merge не решают данную проблему...
-~{}~ 19.06.04 15:28:
ЗЫЫ. Модераторы, смените название топика, плиз.
-~{}~ 19.06.04 15:37:
Нашел баг в базе. Кому интересно http://bugs.php.net/28817
Код
PHP:
<?
class a extends DOMDocument {
private $prop = array ();
public function __construct () {
parent::__construct ();
}
public function setProp1 () {
echo 'a::setProp1 called<br/>';
$test = array (1);
$this->prop[] = $test;
}
public function setProp2 () {
echo 'a::setProp2 called<br/>';
$test = array (1);
$prop_ =& $this->prop;
$prop_[] = $test;
}
};
class b {
private $prop = array ();
public function setProp1 () {
echo 'b::setProp1 called<br/>';
$test = array (1);
$this->prop[] = $test;
}
public function setProp2 () {
echo 'b::setProp2 called<br/>';
$test = array (1);
$prop_ =& $this->prop;
$prop_[] = $test;
}
};
$o = new a();
$o->setProp1 ();
var_dump ($o);
$o->setProp1 ();
var_dump ($o);
unset ($o); // это еще что за фигня? Если ее убрать, то не создается новый экземпляр класса, а используется старый
echo '<hr/>';
$o = new a();
$o->setProp2 ();
var_dump ($o);
$o->setProp2 ();
var_dump ($o);
echo '<hr/>';
$o = new b();
$o->setProp1 ();
var_dump ($o);
$o->setProp1 ();
var_dump ($o);
echo '<hr/>';
$o = new b();
$o->setProp2 ();
var_dump ($o);
$o->setProp2 ();
var_dump ($o);
?>
Код:
a::setProp1 called
object(a)[1]
private 'prop' =>
array
empty
a::setProp1 called
object(a)[1]
private 'prop' =>
array
0 =>
array
0 => 1
---
a::setProp2 called
object(a)[1]
private 'prop' =>
&array
a::setProp2 called
object(a)[1]
private 'prop' =>
&array
---
b::setProp1 called
object(b)[2]
private 'prop' =>
array
0 =>
array
0 => 1
b::setProp1 called
object(b)[2]
private 'prop' =>
array
0 =>
array
0 => 1
1 =>
array
0 => 1
---
b::setProp2 called
object(b)[1]
private 'prop' =>
array
0 =>
array
0 => 1
b::setProp2 called
object(b)[1]
private 'prop' =>
array
0 =>
array
0 => 1
1 =>
array
0 => 1

PHP-5.0.0RC3/xdebug-2.0.0dev (последний точно виноват - проверял).
-~{}~ 19.06.04 15:24:
ЗЫ. Да кстати ни прямое указание индекса при присвоении, ни использование array_merge не решают данную проблему...
-~{}~ 19.06.04 15:28:
ЗЫЫ. Модераторы, смените название топика, плиз.
-~{}~ 19.06.04 15:37:
Нашел баг в базе. Кому интересно http://bugs.php.net/28817