dousui3124 2015-09-21 08:27
浏览 48

实例化对象以在静态访问器中使用

Background

I have two classes, A and B, where A is a class which is full of static methods (Behat/Mink step definitions), but using logic methods from an instance of class B.

What I want is to have class A be able to use methods from an instance of B, A will have no constructor.

class A {
    // This class needs an instance of B, but A has no constructor

    const B_INSTANCE = new B(); //Surely not?
}

class B {
    public function __construct() {}

    public function methodForUseInClassA() {...}
}

Nuance

Right now, I have A extending B, but for unit testing purposes, instantiating B would be a better solution.

Question

How can I facilitate this? Is there some accepted best practice for this?

Any tips appreciated!

  • 写回答

1条回答 默认 最新

  • douyin7416 2015-09-21 08:33
    关注

    Either try to extend class A extends B {}, then you'll have access to the methods of B. Or try this one:

    class A {
        //This class needs an instance of B, but A has no constructor
        private static $instanceOfB = null;
    
        // singleton returns always the same object while script is running
        public static function getInstanceOfB() {
            if( self::$instanceOfB === null ) {
                self::$instanceOfB = new B();
            }
    
            return self::$instanceOfB;
        }
    
        // always returns a new instance
        public static function getNewInstanceOfB() {
            return new B();
        }
    }
    
    class B {
        public function __construct() {}
    
        public function methodForUseInClassA() {
            // do something
        }
    
    }
    

    You can call it like this, but I think extending is the better option, except you just need some static helper methods.

    $b = A::getInstanceOfB();
    $b->methodForUseInClassA();
    
    评论

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向