【发布时间】:2012-07-23 13:56:11
【问题描述】:
我有一个类Foo 有许多公共和私有方法。其中一种方法变得相当大,我想将它分叉到一个专门用于该目的的单独类中。像这样的:
<?php
class Foo
{
// ...
public function doX( $a, $b )
{
$x = new FooXDoer;
$x->foo = $this;
return $x->run( $a, $b );
}
// ...
}
class FooXDoer
{
public $foo;
public function run( $a, $b )
{
// ...
}
// ...
}
FooXDoer 可以通过$this->foo 访问Foo 的公共方法和属性。
如何让FooXDoer 访问Foo 的私有方法和属性,而不将它们公开给已经使用Foo 的其余代码?
我是否应该创建一个单独的类FooPrivate,将私有方法设为公共,将Foo 包装起来,然后让FooXDoer 引用它? FooPrivate 应该叫什么?
或者我的方法完全错误?你一般是怎么解决这个问题的?
【问题讨论】:
-
目前还不清楚(至少对我而言)您要在这里做什么。你能用现实生活中的例子吗?
-
如果你想在类之间分离功能,请确保类有它们的信息。如果函数 X 依赖于对象 y 的数据并对其进行操作,我建议您将功能保留在对象 y 中。
-
我会说让他们公开,但放入 cmets 以警告其他编码人员。虽然您可能可以构建一些以编程方式阻止其他类访问的东西,但它不会很漂亮。
-
如果你想访问私有属性,你可以将它们传递给 FooXDoe() 的构造函数。但是,您不能对私有方法执行此操作。
标签: php private friend private-members