мой первый собственный вопрос о Stackoverflow!
Прежде всего: спасибо за вашу помощь, и извините за мой плохой английский. ^^
Я пытаюсь получить значения, которые метод дочернего класса дает своему методу родительского класса. Проблема в,
что метод родительского класса завершает текущий скрипт exit;
+ У меня нет доступа к
дочерний класс (классы) + я не хочу редактировать «один класс» (см. ниже).
Код для лучшего понимания:
<?php
// The Controller
class one{
// [...]
public $classVAR = "";
public $classVAR2 = "";
public function render($param1, $param2){
// This are the variables that I need.
$this->classVAR = $param1;
$this->classVAR2 = $param2;
return new View(); // Returns the Page Content
}
public function display($param1, $param2, $exit = true){
echo $this->render($param1, $param2);
if($exit === true){
exit;
}
}
// [...]
}
// Another Class to which I have no control (ex. "Plugin Classes")
class two extends one{
// [...]
public function index(){
// Some other Stuff
// string $stuff
// array $otherstuff
$this->display($stuff, $otherstuff);
}
// [...]
}
?>
Я попытался прочитать содержание метода index, внутри «два класса».
Так что я поймал источник функции индекса и отделил параметры внутри
$this->display
вызов метода.
Проблема: $otherstuff
переменная содержит — в большинстве случаев — массив с одним (или более)
пары «ключ => опция», которые могут использоваться классом представления. И «два класса», который я использовал для этого
эксперимент, содержит пару 'something' => $this->loadOptions()
и этот метод был защищен.
Я попытался загрузить содержимое, которое возвращается из класса просмотра, в буфер. Но exit;
команда
полностью ломает код php и печатает вывод напрямую (а я не хочу выводить из
Класс «Вид»).
Код:
class myclass extends one{
public function myfunc(){
ob_start();
$something = new two();
$something->index();
ob_end_clean();
$param1 = $this->classVAR;
$param2 = $this->classVAR2;
}
}
Можно ли вызвать метод индекса (из «двух классов») временным, без полного перерыва
сквозь exit;
линия?
Или можно загрузить класс «два» в буфер и затем манипулировать $this->display
метод? Если да, то я мог бы добавить третий параметр, который отключил бы exit;
линия.
Или можно «поменять» родителя двух классов?
У вас есть другая идея, как я могу решить эту проблему? Но, пожалуйста, без экспериментальных кодов PHP,
или дополнительные расширения / библиотеки PHP.
Благодарю вас!
(Я надеюсь, что смогу хорошо объяснить свою проблему.)
Искренне Ваш,
Сэм.
Вы пытались установить значение по умолчанию $ exit в false?
class one{
//...
public function display($param1, $param2, $exit = false){
// ...
}
}
как насчет второго варианта?
Пользовательский класс расширяет два учебный класс
class myclass extends two{
public function display($param1, $param2, $exit = false){
parent::display($param1, $param2, $exit);
}
}
$something = new myclass();
$something->index();
Других решений пока нет …