У меня есть класс Foo
и класс Bar
и я хочу использовать Bar
«s статические методы, чтобы получить одноэлементный экземпляр Foo
, (по аналогии с тем, как BitmapFactory.create()
возвращает Bitmap
экземпляр), НО Foo
не следует вводить с помощью new Foo()
, как я могу это получить?Factory статические методы и частные конструкторы
class Foo {
$private Foo() {} // ??
}
class Bar {
private static $foo = null;
static function getFooInstance() {
if(Bar::$foo == null) $foo = new Foo();
return Bar::$foo;
}
}
$foo = Bar::getFooInstance();
1) Вместо 'self :: $ instace = new Foo()' вы могли бы определить его как: 'self :: $ instance = new self()' 2) Вы можете придерживаться принципа DRY здесь, просто например: '$ i = & self :: $ instance; if (is_null ($ i)) {$ i = new self();} return $ i; ' – Yang
@DaveJust, вы ничего не получаете, делая это, хотя .... Он всегда будет возвращать' Foo' .. вам придется использовать 'static' вместо' self', потому что это означает что-то другое (как подкласс foo). – Orangepill