Можно ли просто заставить методы работать как с статическими вызовами, так и с вызовами объектов-экземпляров.
Например:
class MyClass {
private static $instance = null;
private $my_value = 'Foo';
public function __construct() {
self::$instance = new self;
}
public static function my_function() {
if(isset($this)) {
$target = $this->; // I know its an invalid declaration
} else {
$target = self::$instance->; // I know its an invalid declaration
}
return $target $my_value; // Invalid statement
}
}
$my_object = new My_Class();
echo $my_object->my_function(); // Should output Foo
echo My_Class::my_function(); // Should output Foo
Надежда это ясно
... почему бы вам когда-нибудь хочет? –
Причина в том, что я хотел посмотреть, могу ли я сделать объект singleton возвращать тот же результат независимо от того, был ли метод вызван статически или из экземпляра. – McShaman
Ну, одноэлемент, по определению, является * объектом *, который создается статически, с некоторыми конструкторскими shenanigans, чтобы гарантировать, что только один существует в любой момент времени. Поскольку это объект, вы должны рассматривать его как единое целое. Конечно, возникает вопрос, почему вы пытаетесь использовать одноэлемент в среде, которая обычно имеет жизненный цикл одного запроса? И передает объекты по ссылке по умолчанию? Я считаю, что одиночные игры не нужны в PHP. Вместо этого используйте инъекцию зависимостей. Это более чистый способ решения проблемы, которая не раздувает сферу действия. –