PHP中的超类和子类

时间:2010-06-23 17:29:02

标签: php oop

考虑以下PHP类代码

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

class SubIdea extends SuperIdea{
}

我在这里面临的问题是,当我调用SubIdea :: getbyId($ t)时;返回的对象是SuperIdea类型,但我希望它是SubIdea.Is有没有办法实现它而不重复SubIdea中的代码?

3 个答案:

答案 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