2012-04-11 73 views
0

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

Class A 
{ 
    public function foo() { } 
} 

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

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

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

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

+0

为什么你不能实例化'B'?我认为这存在你的实际问题。 – Bazzz 2012-04-11 10:48:55

+2

我的印象是这是一个设计问题,而不是语法问题。 – 2012-04-11 10:53:18

+0

小心阐述为什么你不能实例化B? – 2012-04-11 10:54:14

回答

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

我想你可能会让你的结构略微偏离。尝试将您想要的作为可重用的代码片段抽象到自己的例程中。

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(); 
0

我想,你只是误解了PHP的语法(Which can be rather confusing sometimes

extends关键字不延长父类(A),但确实创建了一个新类B,它是A的子项。 B继承A的方法,但A本身没有改变。

相关问题