tags:

views:

54

answers:

3

Consider the following PHP class code

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

class SubIdea extends SuperIdea{
}

The problem I face here is that when I call SubIdea::getbyId($t); the object returned is of type SuperIdea but I would like it to be of SubIdea.Is there any way to achieve it without repeating code in SubIdea?

+4  A: 

Try replacing new SuperIdea() with new {get_called_class()}();

I've never tested this, but I see no reason why it shouldn't work...

Ivar Bonsaksen
Of note, `get_called_class` is new in PHP 5.3.
Charles
Any solution that can be used in PHP4 ?
Akshar Prabhu Desai
+1  A: 

Ivar's answer (basically, to use get_called_class()) works. Please upvote/select his answer.

Quick demo:

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

class subcls extends supercls {

}

supercls::foo();
subcls::foo();
timdev
A: 
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) { ["var"]=> string(6) "foobar" }

PHP >= 5.3

Wrikken