Referência de Objetos (o Ampersand &)
O suporte para orientação a objetos era completamente novo para o PHP 4, e
sendo assim, não era muito sofisticado em comparação ao suporte a OO de
outras linguagens, como o Java. Na atribuição de objetos GTK à variáveis,
era absolutamente necessário não fazer uma cópia do mesmo, mas sim,
passá-lo por referência.
//PHP 4: cópia como um comportamento padrão
$a = new GtkLabel();
$a->set_text('1');
$b = $a;
$b->set_text('2');
echo $a->get();//still 1
|
Então, para não fazer apenas uma cópia, era necessário o uso do ampersand
& na atribuição das variáveis:
//PHP 4: construindo referências
$a = new GtkLabel();
$a->set_text('1');
$b = &$a;
$b->set_text('2');
echo $a->get();//is 2 now
|
Entretanto, uma cópia do objeto
ainda é feita: na
construção. Para ser totalmente correto, especialmente com widgets, você
tinha que fazer:
//PHP 4: referência na construção
$a = &new GtkLabel();
|
Com o PHP 5 as coisas mudaram: passagem por referência agora é o
comportamento padrão; não é preciso mais usar o ampersand! O seguinte
script funciona perfeitamente no PHP 5 com o PHP-GTK 2, e sem nenhum
problema:
<?php
//PHP5: no Ampersand any more
$a = new GtkLabel();
$a->set_text('1');
$b = $a;
$b->set_text('2');
echo $a->get_text();//is 2
?> |
O mesmo se aplica para callbacks: nada de ampersand!
Uma vez que você tinha que fazer o seguinte no PHP-GTK 1:
$window->connect_object('destroy', array(&$object, 'function'));
|
você simplesmente deixa de lado o & com o PHP 5 e o GTK 2:
$window->connect_simple('destroy', array($object, 'function'));
|