尽管有很多类似主题的问题,但还是找不到我想要的东西......
示例:
class A {
public $_Thing_B; // class B object
}
class B {
public function printSelf() {}
}
构建时,Class A
会将相应版本的Class B
拉入其中,此对象用于Class A
中的各种私有方法。
但是Class B
确实有一些公共方法,只有在代码中“处理”Class A
时才会有用(因此不能直接使用Class B
的独立实例)。
因此,偶尔我想这样做:
$objA = new A;
$result = $objA->$_Thing_B->printSelf();
在我看来,维护此功能的唯一方法是将Class B
声明为Class A
内的公共变量。
这是对的吗?或者有没有办法让它保持私密,同时仍然暴露某些公共方法?
答案 0 :(得分:0)
如果您确实需要在$_Thing_B
中保持A
私有,则可以将公共方法中需要公开的B
方法包装起来。我认为这很奇怪,并且会亲自将$_Thing_B
作为公共财产,并直接以A->B->method()
class A {
private $_Thing_B; // class B object is private
// Wrap private _Thing_B's methods in public methods:
public function print_B() {
$this->_Thing_B->printSelf();
}
}
$objA = new A();
$result = $objA->print_B();
答案 1 :(得分:0)
对于您需要使用ClassB的特殊方法,您只需创建该方法
即可所以而不是
$objA->$_Thing_B->printSelf();
你打电话
$objA->printSelf();
和A类看起来像:
class A {
private $_Thing_B; // class B object
public function printSelf(){
$this->_Thing_B->printSelf();
}
}
不要忘记实例化B级,例如在构造函数内但在使用它之前!
答案 2 :(得分:0)
您可以通过将一些B类方法重新实现到A类中,为B类对象$_Thing_B
创建Adapter。
例如,对于printSelf()
方法,我们可以使用:
class A {
private $_Thing_B;
public function printSelf() {
return $this->_Thing_B->printSelf();
}
}
$objA = new A();
$result = $objA->printSelf();
答案 3 :(得分:0)
这对我来说很好。
$a = new A();
$a->_Thing_B->printSelf();
class A {
public $_Thing_B; // class B object
public function __construct()
{
$this->_Thing_B = new B();
}
}
class B {
public function printSelf()
{
print_r("This is Class B::printSelf()");
}
}
但你也可以这样做,这可能是更好的方法: -
$a = new A();
$a->getThingB()->printSelf();
class A {
private $_Thing_B; // class B object
public function __construct()
{
$this->_Thing_B = new B();
}
public function getThingB()
{
return $this->_Thing_B;
}
}
class B {
public function printSelf()
{
print_r("This is Class B::printSelf()");
}
}
两个选项都提供输出"This is Class B::printSelf()"
因此,private
方法$_Thing_B
公开了public
变量getThingB()
。