doushizhou4477 2016-02-28 21:49
浏览 13
已采纳

只从内部实例化类

I am looking for a way where you can call a static method in a class, which will create an instance of itself. I would like it so it isn't possible to instantiate the class outside of itself. I have tried this, but I get an error saying Cannot instantiate abstract class (Which I assumed would happen).

abstract class Test {

    public function __construct($item){

    }

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

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

}

It's usage would look something like this:

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

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

Is there any way to do something like this?

  • 写回答

1条回答 默认 最新

  • doujiao1984 2016-02-28 21:58
    关注

    You need to make the constructor private and then return the instance.. Something like this:

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

    Now you would create new instances only like this:

    $new_object = Test::from('something');
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答