Referencji zachowanie osobliwe

26 Oct 2005

Być to może ktoś już miał podobną zagwózdkę. Gdy nie, może ustrzeże go to przed stratą mnóstwa czasu.

$ php
<?PHP

class Cos {
    function __toString() {
        return get_class(&$this)."\n";
    }
}

class Cos1 extends Cos {}
class Cos2 extends Cos {}


$a = new Cos1();
$b = new Cos2();

$out1 = &$a;
$out2 = &$out1;

echo $out2->__toString();

$out1 = &$b; // *

echo $out2->__toString();

?>
^D
Cos1
Cos1

It's not a bug, it's a feature. Z powyższego przykładu wynikają rzeczy następujące

  1. Przypisanie referencyjne do referencji powoduje natychmiastową propagację aż do ostatniej zmiennej w całym łańcuchu referencji.
  2. Wykonywanie przypisania referencyjnego na zmiennej, która kryje w sobie referencję powoduje zmianę celu tej referencji a nie obiektu referowanego (wiersz oznaczony gwiazdką)

Zachowanie jest identyczne w Zend Engine 1 oraz 2.

Digg del.icio.us StumbleUpon Wykop Reddit Folksr

permalink | trackback | rss

 
 
Jajcus

Chory język. Coraz bardziej się o tym przekonuję.

Your turn:

nick:
and?:
www (if any):
Wpisz kod:code