2010-11-25 4 views
1

Comment puis-je obtenir la variable $ str (ci-dessous) dans ma classe/classes? La fonction est utilisée pour appeler chaque classe dynamiquement plutôt que d'avoir des "lots" d'instructions if (class_exists).Classes PHP/fonctions

à la page:

echo rh_widget('Search'); 

la fonction (sur les fonctions page):

function rh_widget($str) { 
global $db, $table_prefix; 
$newwidget = 'rh_'.strtolower($str); 
    if(class_exists($newwidget)): 
    $rh_wid = new $newwidget(); 
    echo $rh_wid->rh_widget; 
    endif; 

}

Puis une classe enfant Parent & (à la page des classes) telles que:

class widget { 
public $str; 
function __construct() { 
$this->before_widget .= '<ul class="rh_widget">'; 
$this->before_title .= '<li><h3>'.$str.''; 
$this->after_title .= '</h3><ul>'; 
$this->after_widget .= '</ul></li></ul>'; 
} 

}

class rh_search extends widget { 
public function __construct() { 
parent::__construct(); 
global $db, $table_prefix; 
    $this->rh_widget .= $this->before_widget; 
    $this->rh_widget .= $this->before_title.' '.$this->after_title; 
    $this->rh_widget .= '<li>Content etc. in here</li>'; 
    $this->rh_widget .= $this->after_widget;  

}}

Ce que je ne peux pas arriver est de « tirer » str $ par de l'appel de fonction par fonction à la classe.

Toute suggestion s'il vous plaît. Merci

Répondre

2

Je pense que vous essayez d'accéder à la variable $str de la classe widget; corrigez-moi si ce n'est pas le cas.

Vous devez passer la variable comme argument au constructeur:

class widget { 
    public $str; 
    function __construct($str) { // add $str as an argument to the constructor 
     $this->before_widget .= '<ul class="rh_widget">'; 
     $this->before_title .= '<li><h3>'.$str.''; 
     $this->after_title .= '</h3><ul>'; 
     $this->after_widget .= '</ul></li></ul>'; 
    } 
} 

class rh_search extends widget { 
    public function __construct($str) { // add $str to the constructor 
     parent::__construct($str); // pass $str to the parent 
     global $db, $table_prefix; 
     $this->rh_widget .= $this->before_widget; 
     $this->rh_widget .= $this->before_title.' '.$this->after_title; 
     $this->rh_widget .= '<li>Content etc. in here</li>'; 
     $this->rh_widget .= $this->after_widget;  
    } 
} 

function rh_widget($str) { 
    global $db, $table_prefix; 
    $newwidget = 'rh_'.strtolower($str); 
    if(class_exists($newwidget)): 
     $rh_wid = new $newwidget($str); // pass $str to the constructor 
     echo $rh_wid->rh_widget; 
    endif; 
} 
+0

Salut lonesomeday - Merci pour cela. Étrange que j'avais à l'origine écrit de cette façon, mais cela n'a pas fonctionné doit avoir raté quelque chose. Mais maintenant fonctionne, merci – rmap

Questions connexes