我有一个名为A的类。我有另一个名为B的类,它扩展了A. 我必须实例化A,而不是B,但我也需要使用B中的方法。我怎么能这样做?
Class A
{
public function foo() { }
}
Class B extends A
{
public function bar() { }
}
$a = new A();
$a->bar();
我知道这是不可能的,但我需要一个解决方案。
PS:我希望这个问题的标题是正确的。
答案 0 :(得分: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();
答案 1 :(得分:0)
我认为,你只是误解了PHP的语法( Which can be rather confusing sometimes )
extends
关键字不扩展父类(A
),但会创建一个新类B
,它是{{1}的子级}}。 A
继承B
的方法,但A
本身不会被更改。
答案 2 :(得分:-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()实现。
我想你的结构可能略有偏差。尝试将您想要的可重用代码片段抽象到自己的例程中。