Объясните казус?

  • Автор темы Wingely Dog
  • Дата начала

Wingely Dog

Guest
Объясните казус?

Обясните казус?

Сразу оговорюсь речь идет о четвертом php

Имеем некий класс
PHP:
class Foo{
    var $foo;
    function Foo(){
    }
}
По хорошему, для создания объекта, мы выполняем конструкцию
PHP:
$obj =& new Foo();
вместо
PHP:
$obj = new Foo();
тоесть ставим эмерсанд, для того, чтобы получить ссылку на объект в памяти а не копию объекта. Все вроде бы хорошо, но вот когда я пытаюсь организовать синглетон в виде

PHP:
function &getFoo(){
    static $obj;
    if (!isset($obj)){
        $obj =& new Foo();
    }
    return $obj;
}
при каждом вызове функции, типа
$obj1 =& getFoo();
$obj2 =& getFoo();

создается новый объект.

Ежели же я делаю синглетон в виде
PHP:
function &getFoo(){
    static $obj;
    if (!isset($obj)){
        $obj = new Foo();
    }
    return $obj;
}
тоесть без эмперсанда, при вызове функции

$obj1 =& getFoo();
$obj2 =& getFoo();

обе переменных ссылются на один и тот же объект.

Вопрос.
Почему не работает синглетон на консрукции с эмперсандом? Где я что упустил?
 

fixxxer

К.О.
Партнер клуба
Для размышления:
PHP:
$b = 1;
function x ()
{
  static $a;
  echo isset($a) ? '1' : '0';
  $a = &$GLOBALS['b'];
}
x();
x();
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Сверху