从A类调用B类并继承A类属性?

时间:2014-09-23 22:50:27

标签: php inheritance

我想知道这种组合是否可行。

classA.php

class A
{
    public $one = "one";

    function start() {

        $this->one = "seven";

        include "classB.php";
        $two = new B;
        print_r(get_defined_vars());
    }
}

classB.php

class B extends A
{
    public $two = "two";

    function __construct() {
        echo($this->one);
    }
}

最后是index.php

include "classA.php";
$A = new A;
$A->start();

当我运行index.php时,我得到以下内容:

Array
(
    [one] => seven
    [B] => B Object
        (
            [two] => two
            [one] => one
        )
    )

有没有办法让B级使用更新的变量?或者我必须将代码分成两个文件并单独使用它?这样它起码至少......但我不喜欢我的代码在课外,我尽量减少使用全局范围......

3 个答案:

答案 0 :(得分:1)

您不必将班级b包含在班级a。

只需使用B类扩展A,即所有。

在您的输出中,您创建了一个新的对象B,它扩展了A类,但是这个B对象是一个与父类无关的新实例。

试试这个:

class A {
  public $propA = 'Property of A class';
}

class B extends A {
  public $propB = 'Property of B class';
}

$obj = new B();

echo $obj->propA; // returns "Property of A class"
echo $obj->propB; // returns "Property of B class"

答案 1 :(得分:0)

您可以使用静力学。这是一种可怕的做法,但是:

class A
{
    public static $one = "one";

    function start()
    {

        $one = "seven";

        $two = new B;
        print_r(get_defined_vars());
    }
}

class B extends A
{
    public $two = "two";

    function __construct() {
        echo($this::$one);
    }
}

答案 2 :(得分:0)

IMO,php.net文档有点稀缺。这就是为什么我们有Stackoverflow,为此我感激不尽。对于小费来说,我现在意识到了这一点。每天学习新东西。

重点。 index.php中的代码应如下所示:

include "classA.php";
include "classB.php";

$B = new B;
print_r(get_defined_vars());

$B->start();
print_r(get_defined_vars());

现在它完全输出我需要的东西:

[B] => B Object ( [two] => two [one] => one ) // before the change
[B] => B Object ( [two] => two [one] => seven ) // after the change