背景
我有两个类,A和B,其中A是一个充满静态方法的类(Behat / Mink步骤定义),但是使用来自B类实例的逻辑方法。
我想要的是让A类能够使用B实例中的方法,A将没有构造函数。
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的
现在,我有A扩展B,但是出于单元测试的目的,实例化B将是一个更好的解决方案。
问题
我如何为此提供便利?是否有一些公认的最佳做法?
任何提示赞赏!
答案 0 :(得分:0)
尝试扩展class A extends B {}
,然后您就可以访问B的方法了。或者试试这个:
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
}
}
你可以像这样调用它,但我认为扩展是更好的选择,除了你只需要一些静态辅助方法。
$b = A::getInstanceOfB();
$b->methodForUseInClassA();