0

当我实例化 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);

    ?>
4

1 回答 1

2

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

class Car {
    public function drive() {
        ...
    }
}

车基本只能开。他不知道其他动作。Car 对扩展它的其他类一无所知。现在让我们通过创建蝙蝠车来扩展汽车。

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

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

回到你的情况。如果你有一个 A 的实例,它的所有函数都在这个类中定义。它没有方法 addup1()。您现在有多种选择:

  1. 重新设计你的类,也许继承没有正确完成。或者,方法 addup1() 可以移动到类 A。
  2. php.net上有人发表了评论(我觉得不太准确)。尽管如此,只要 addup1() 不访问 B 的任何属性,您就可以在 A 中创建该方法,然后在 B 中调用该方法...参见此评论

即使您可以执行第二种解决方案,我也不推荐它。这与继承的想法背道而驰。最好重新考虑这些课程,并可能对其进行一些更改。

于 2012-06-26T06:40:07.533 回答