PHP классы / функции - PullRequest
       26

PHP классы / функции

1 голос
/ 25 ноября 2010

Как мне получить переменную $ str (ниже) в моем классе / классах? Функция используется для динамического вызова каждого класса, а не для того, чтобы иметь «множество» операторов if (class_exists).

на странице:

echo rh_widget('Search');

функция (на странице функций):

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;

}

Затем класс Parent & child (на странице классов), такой как:

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;    

} }

Чего я не могу добиться, так это «протянуть» $ str через вызов функции через функцию в класс.

Любое предложение, пожалуйста. Спасибо

1 Ответ

2 голосов
/ 25 ноября 2010

Я думаю, вы пытаетесь получить доступ к переменной $str из класса widget; поправьте меня, если это не так.

Вам необходимо передать переменную в качестве аргумента конструктору:

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;
}
...