Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在父类中设置对象并在子类中使用它?_Php_Oop_Inheritance - Fatal编程技术网

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是的,的确如此。在子类中重新定义方法会完全隐藏父方法。