我正在寻找一种可以在类中调用静态方法的方法,该方法将创建自己的实例。我想它所以不可能在自身之外实例化类。我试过这个,但是我得到一个错误,说无法实例化抽象类(我认为会发生这种情况)。
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 :(得分:1)
你需要将构造函数设为私有,然后返回实例..这样的东西:
class Test {
private function __construct($item){
}
public static function from($item){
return new static($item);
}
}
现在你只会像这样创建新实例:
$new_object = Test::from('something');