Forum und email

Референции на обекти (Амперсант &)

Новото в PHP 4 беше поддръжката на Обектно-Ориентираното (ОО) програмиране, но използването му не беше така добре развито, както при някои други еизици за ОО програмиране, например JAVA. Когато задавахте дадена променлива беше абсолютно необходимо да не правите копие на GTK обектите, а да се използват референциите.

//PHP 4: копирането беше основният процес
$a = new GtkLabel();
$a->set_text('1');
$b = $a;
$b->set_text('2');
echo $a->get();//стойността е все още 1
За да не правите копие бяхте задължени да използвате амперсант (&):
//PHP 4: създаване на референция (отпратка)
$a = new GtkLabel();
$a->set_text('1');
$b = &$a;
$b->set_text('2');
echo $a->get();//стойността сега е 2
Въпреки това, копие на обекта се прави при създаването. При GTK уйджетите, за да бъдем по ясни, трябва да направите:
//PHP 4: Референция
$a = &new GtkLabel();

В PHP 5 нещата бяха променени. Основният метод сега е референцията (не копирането) и използването на амперсант вече не е обходимо вече! Следващият скрипт работи със PHP 5 и GTK 2:

<?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
?>

Същото се отнася и за callbacks (обратно извикване) - отпада амперсанта! При PHP 4 и GTK 1 трябваше да:

$window->connect_object('destroy', array(&$object, 'function'));
при PHP 5 и GTK 2 амперсанта отпада:
$window->connect_simple('destroy', array($object, 'function'));