Php 如何在父类中设置对象并在子类中使用它?
下面是一些工作代码:Php 如何在父类中设置对象并在子类中使用它?,php,oop,inheritance,Php,Oop,Inheritance,下面是一些工作代码: class A { public $Foo; public function GetFoo() { $this->Foo = 'Bar'; } } class B extends A { function __construct() { $this->GetFoo(); echo $this->Foo; } } $b = new B(); // Outputs "
class A {
public $Foo;
public function GetFoo() {
$this->Foo = 'Bar';
}
}
class B extends A {
function __construct() {
$this->GetFoo();
echo $this->Foo;
}
}
$b = new B(); // Outputs "Bar"
有没有办法让这个“更漂亮”(即不使用A::GetFoo()方法)?我本以为将$this->Foo的填充封装在a::\uu构造()中是可行的,但事实并非如此
总而言之,我想要的是:类A实例化我的DB对象,并且该对象可用于A的每个子类。也许您正在重写父类的构造函数,而无需从
B
调用
class A {
protected $Foo = null;
public function __construct() {
$this->Foo = 'Bar';
}
}
class B extends A {
public function __construct() {
parent::__construct();
echo $this->Foo;
}
}
也许您正在重写父级的构造函数,而不从
B
调用
class A {
protected $Foo = null;
public function __construct() {
$this->Foo = 'Bar';
}
}
class B extends A {
public function __construct() {
parent::__construct();
echo $this->Foo;
}
}
从:
“类属性必须定义为
公共、私人或受保护。如果
在没有显式
visibility关键字,属性将
被定义为公共的
因此,您的类B
可以看到$this->Foo
。您不必先调用GetFoo()
。但是,如果需要在类B
的构造函数中引用$this->Foo
,则必须首先调用父构造函数:
“类属性必须定义为
公共、私人或受保护。如果
在没有显式
visibility关键字,属性将
被定义为公共的
因此,您的类
B
可以看到$this->Foo
。您不必先调用GetFoo()
。但是,如果需要在类B
的构造函数中引用$this->Foo
,则必须首先调用父构造函数。我不明白为什么会这样,因为这两个类都是用它们自己的对象实例化的。我想我必须在每个子构造函数中调用父构造函数then@John是的,的确如此。在子类中重新定义方法完全隐藏了父类方法。显然,我是。我不明白为什么会这样,因为这两个类都是用它们自己的对象实例化的。我想我必须在每个子构造函数中调用父构造函数then@John是的,的确如此。在子类中重新定义方法会完全隐藏父方法。