问题描述
|
class A
{
public function foo()
{
}
}
class B
{
$a = new A;
public function go()
{
}
}
我希望不能直接创建对象,而只能由类B创建。
我该怎么做。
解决方法
你为什么需要那个?
记住-类是对象的事实上的工厂,对象应该执行操作,并且应该通过传递的参数和可用的实例变量来执行操作,这意味着您应该将对象需要的所有内容传递给构造函数,而不必关心事实每个人都可以创建对象。
说真的
,听起来您想扩展一个抽象类。
abstract class A {
protected function foo() {
echo \"Hello world!\";
}
}
class B extends A {
public function go() {
$this->foo();
}
}
$obj = new B;
$obj->foo(); // error - cannot call a protected method directly
$obj->go(); // echo\'s \"Hello world!\"
,如果您确实要执行此操作,请检查工厂设计模式。我认为这将是您所要的。在那里,我们将有一个单独的工厂类来管理对象创建。