PHP:实例化一个Class并使用另一个Class的方法

时间:2012-04-11 10:44:52

标签: php class methods instantiation

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

Class A
{
    public function foo() { }
}

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

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

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

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

3 个答案:

答案 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()实现。

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