繁体   English   中英

仅从自身内部实例化类

[英]Only instantiate class from within itself

我正在寻找一种可以在类中调用静态方法的方法,该方法将创建其自身的实例。 我想要它,所以无法在自身外部实例化该类。 我已经尝试过了,但是我收到一个错误消息,说无法实例化抽象类 (我以为会发生)。

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();

有什么办法可以做这样的事情吗?

您需要将构造函数设为私有,然后返回实例。

class Test {

    private function __construct($item){

    }

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

}

现在,您只需要像这样创建新实例:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM