0

我有一个名为 A 的类。我有另一个扩展 A 的名为 B 的类。我必须实例化 A,而不是 B,但我也需要使用 B 中的方法。我怎样才能做到这一点?

Class A
{
    public function foo() { }
}

Class B extends A
{
    public function bar() { }
}

$a = new A();
$a->bar();

我知道这是不可能的,但我需要一个解决方案。

PS:我希望这个问题的标题是正确的。

4

3 回答 3

1
$a = new A();
$a->bar();

会给你致命的错误。因为bar()不是类的方法A。所以你不能使用A类的对象来调用它。

这将正常工作:

Class A
{
   public function foo() { }
}

Class B extends A
{
   public static function bar() {  }
}

$a = new A();
B::bar();
于 2012-04-11T11:17:16.117 回答
0

我认为,您只是误解了 PHP 的语法(有时会让人感到困惑

extends关键字不会扩展父类 ( A),但会创建一个新类B,它是 的子类AB继承A的方法,但A本身没有改变。

于 2012-04-11T13:19:53.663 回答
-1

B中的方法可以变成静态的吗?

Class A
{
    public function foo() { }
}

Class B extends A
{
    public static function bar2() { }
}

$a = new A();
$a->bar();
B::bar2();

显然,将其命名为不同的名称是有意义的,因为 B::bar() 正在覆盖 A::bar() 实现。

我认为您的结构可能略有偏差。尝试将您想要的内容作为可重用的代码片段抽象到它自己的例程中。

于 2012-04-11T10:51:07.177 回答