2010-06-23 89 views
2

考虑下面的PHP类代码超类和子类在PHP

class SuperIdea{ 
. 
. 
. 
static function getById($id){ new SuperIdea(.......); } 
. 
. 
. 
. 
} 

class SubIdea extends SuperIdea{ 
} 

我在这里所面临的问题是,当我打电话SubIdea :: getbyId($ T);返回的对象是类型SuperIdea,但我希望它是SubIdea.Is有没有办法实现它,而无需在SubIdea中重复代码?

回答

7

尝试用new {get_called_class()}();

我从来没有测试过更换new SuperIdea(),但我看不出有任何理由不应该工作...

+1

值得注意的是,'get_called_class'是PHP 5.3中的新成员。 – Charles 2010-06-23 19:44:03

+0

任何可以在PHP4中使用的解决方案? – 2010-06-25 13:59:15

2

伊瓦尔的回答(基本上,使用get_called_class())工程。请upvote /选择他的答案。

快速演示:

<?PHP 
class supercls { 
    static function foo(){ 
     $class = get_called_class(); 
     echo $class ."\n"; 
    } 
} 

class subcls extends supercls { 

} 

supercls::foo(); 
subcls::foo(); 
1
class SuperIdea { 
    public $var; 
    function __construct($var){ 
     $this->var = $var; 
    } 
    static function getById($id){ return new static('foobar'); } 
} 

class SubIdea extends SuperIdea{} 
var_dump(SubIdea::getById(0)); 

对象(SubIdea)#1(1){ [ “变种”] => 串(6) “foobar的” }

PHP> = 5.3