考虑以下PHP类代码
class SuperIdea{
.
.
.
static function getById($id){ new SuperIdea(.......); }
.
.
.
.
}
class SubIdea extends SuperIdea{
}
我在这里面临的问题是,当我调用SubIdea :: getbyId($ t)时;返回的对象是SuperIdea类型,但我希望它是SubIdea.Is有没有办法实现它而不重复SubIdea中的代码?
答案 0 :(得分:7)
尝试将new SuperIdea()
替换为new {get_called_class()}();
我从来没有对此进行测试,但我认为没有理由不这样做......
答案 1 :(得分:2)
Ivar的答案(基本上,使用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();
答案 2 :(得分: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));
object(SubIdea)#1(1){ [ “变种”] =&GT; string(6)“foobar” }
PHP&gt; = 5.3