2016-02-28 3 views
0

Я ищу способ, которым можно вызвать статический метод в классе, который создаст экземпляр самого себя. Я бы хотел, чтобы это невозможно было создать экземпляр класса вне себя. Я пробовал это, но я получаю сообщение об ошибке Невозможно создать экземпляр класса (что я предположил, что это произойдет).Только экземпляр класса изнутри

abstract class Test { 

    public function __construct($item){ 

    } 

    public static function from($item){ 
     return new Test($item); 
    } 

    public function testFunc(){ 
     // Do some stuff 
     return $this; 
    } 

} 

Это использование будет выглядеть примерно так:

// Valid 
Test::from($myItem)->testFunc(); 

// Invalid 
(new Test($myItem))->testFunc(); 

Есть ли способ сделать что-то вроде этого?

+0

кажется, что вы пытаясь реализовать Singleton для этого класса, так это? –

+1

Создайте конструктор 'private', а не класс' abstract'. – Marvin

+1

Подробнее о [singleton class] (http://www.phptherightway.com/pages/Design-Patterns.html) шаблон дизайна –

ответ

1

Вам нужно сделать конструктор приватным и затем возвращает экземпляр .. Что-то вроде этого:

class Test { 

    private function __construct($item){ 

    } 

    public static function from($item){ 
     return new static($item); 
    } 

} 

Теперь вы можете создать новые экземпляры только так:

$new_object = Test::from('something'); 
+0

Похоже, что это будет сделано! –

Смежные вопросы