2010-06-23 11 views
2
Sous-classes

Consultez le code de classe PHP suivantsuperclasse et en PHP

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

class SubIdea extends SuperIdea{ 
} 

Le problème que je face à ici est que quand je l'appelle SubIdea :: getbyId ($ t); l'objet retourné est de type SuperIdea mais je voudrais qu'il soit de SubIdea. Y a-t-il un moyen de le réaliser sans répéter le code dans SubIdea?

Répondre

7

Essayez de remplacer new SuperIdea() avec new {get_called_class()}();

Je ne l'ai jamais testé, mais je ne vois pas pourquoi il ne devrait pas travailler ...

+1

Notez que 'get_called_class' est nouveau dans PHP 5.3. – Charles

+0

Toute solution pouvant être utilisée en PHP4? –

2

réponse Ivar (essentiellement, à utiliser get_called_class()) œuvres . S'il vous plaît upvote/sélectionnez sa réponse.

Démo rapide:

<?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)); 
objet

(SubIdea) # 1 (1) { [ "var"] => string (6) "foobar" }

PHP> = 5.3

Questions connexes