如何从父类访问基类数据

时间:2012-06-26 06:09:28

标签: oop class instantiation abstraction

当我实例化A类时,如何访问B类的功能, 而不是抽象类?这个问题最简单的解决办法是什么?         

    class A
    {
        public $a = 3;
        public function addup($var)
        {
            return ($var + $var);
        }
    }

    class B extends A
    {
        public function addup1($var)
        {
            return ($var * $var);
        }
    }


    $obj = new A();
    echo "Func from Class A: " . $obj->addup(3);
    echo "<br>";
    echo $obj->addup1(3);
    echo "<br><br><br><br>";



    $obj = new B();
    echo "Func from Class A: " . $obj->addup(3);
    echo "<br>";
    echo "Func from Class B: " . $obj->addup1(3);

    ?>

1 个答案:

答案 0 :(得分:2)

通常你可以/不应该。如果你有一辆汽车,例如:

class Car {
    public function drive() {
        ...
    }
}
汽车基本上只能驾驶。他不知道任何其他行为。汽车对延伸它的其他课程一无所知。现在让我们通过创建一个Batmobile来扩展汽车。

class Batmobile extends Car {
    public function shoot() {
        ...
    }
}

蝙蝠车有能力用机枪射击。这是除了汽车可以做的所有(在这种情况下驾驶)。另一方面,普通汽车$fiat = new Car();不是蝙蝠车,因此无法射击。

回到你的案子。如果您有A的实例,则其所有函数都在此类中定义。它没有addup1()方法。您现在有多种选择:

  1. 重新设计你的课程,也许继承没有做好。或者也许方法addup1()可以移动到A类。
  2. php.net有人发表评论(我发现这些评论不太准确)。尽管如此,只要addup1()不访问B的任何属性,您就可以在A中创建方法,只需调用B中的方法...参见this comment
  3. 即使你可以做第二个解决方案,我也不推荐它。这违背了继承的想法。最好重新考虑类,也许可以稍微改变一下。