Мне интересно, возможно ли при использовании ключевого слова 'new' возвращать ссылку на существующий объект вместо нового объекта.И если нет, то как лучше всего избежать сосуществования объектов с одинаковыми параметрами?
У меня есть класс с аргументами в конструкторе.Если я использую аргументы, аналогичные аргументам существующего экземпляра, я бы хотел, чтобы мой новый объект был ссылкой на существующий.Является ли это возможным?Я понимаю, что он отличается от одиночного, так как в этом случае у нас может быть несколько экземпляров одного и того же класса, но не несколько экземпляров, использующих одинаковые параметры.
class myClass{
public $signature; /* Unique signature for the connection */
public static $instances = array(); /* Array of references to connection */
private static function singleton($cfg,$inst){
$signature = sha1(serialize($cfg));
foreach ( self::$instances as $obj )
{
if ( $obj->signature == $signature )
return $obj;
}
array_push(self::$instances,$inst);
return true;
}
function __construct($myParam){
if ( is_object(self::singleton($myParam,$this) )
// Here I'd like $this to become the ref of my existing object
else
{
$this->signature = $myParam;
// I construct my new object
}
}
}
$e1 = new myClass(1);
$e2 = new myClass(2);
$e3 = new myClass(1); // $e3 should be a reference to $e1