我有一个名为 A 的类。我有另一个扩展 A 的名为 B 的类。我必须实例化 A,而不是 B,但我也需要使用 B 中的方法。我怎样才能做到这一点?
Class A
{
public function foo() { }
}
Class B extends A
{
public function bar() { }
}
$a = new A();
$a->bar();
我知道这是不可能的,但我需要一个解决方案。
PS:我希望这个问题的标题是正确的。
我有一个名为 A 的类。我有另一个扩展 A 的名为 B 的类。我必须实例化 A,而不是 B,但我也需要使用 B 中的方法。我怎样才能做到这一点?
Class A
{
public function foo() { }
}
Class B extends A
{
public function bar() { }
}
$a = new A();
$a->bar();
我知道这是不可能的,但我需要一个解决方案。
PS:我希望这个问题的标题是正确的。
$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();
我认为,您只是误解了 PHP 的语法(有时会让人感到困惑)
该extends
关键字不会扩展父类 ( A
),但会创建一个新类B
,它是 的子类A
。B
继承A
的方法,但A
本身没有改变。
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() 实现。
我认为您的结构可能略有偏差。尝试将您想要的内容作为可重用的代码片段抽象到它自己的例程中。