Как и почему это происходит?

Рейтинг: 0Ответов: 1Опубликовано: 04.09.2014

Вот код:

class reftest
{
    public $a = 1;
    public $c = 1;

    public function reftest()
    {
        $b =& $this->a;
        $b++;
    }

    public function reftest2()
    {
        $d =& $this->c;
        $d++;
    }
}

$reference = new reftest();

$reference->reftest();
$reference->reftest2();

echo $reference->a;
echo $reference->c;

Почему выведется 32?

Ответы

▲ 2Принят

Методы, названные по имени класса, будут вызваны при создании, как и конструктор. Насколько знаю (а знаю только слухи), это ведется с древних времен, когда конструктором был не __construct(), а метод, названный по имени класса (если опять же не ошибаюсь, такая конвенция принята в яве и c++). Другими словами, надо просто переименовать класс или метод reftest().