2015-10-02 2 views
3

У меня есть файл, например. class.php с помощью следующего кода:Добавление значений из дочернего класса в родительский класс

//class.php 
class main_class { 

public $output; 

public function print_me ($msg){ 
$this->output .= $msg.'\r\n' ; 
} 

//…. 
//…. 
//more functions 
// some of them using this->print_me 

} 

class sub_class extends main_class { 

function verification(){ 
this->print_me ('Log: while verification'); 
} 

} 
//class.php ends 

мне нужно начать main_class в main.php файла, код main.php файла следующим образом

//main.php 
require 'class.php'; 
    $main_class = new main_class(); 
    //and need to append values into output variables 
$main_class->print_me ('Log: from main.php '); 
//but before echoing , I need to initiate sub class as follows: 
//$sub_class = new $sub_class(); 
//though I do not need to append/ values using $sub_class instance , 
//I need to append value from within the class itself at last I can print output variable e.g. 
echo $main_class->output; 

позже я знал, класс sub_class код неправильно , так что изменилось с

function verification(){ 
this->print_me ('Log: while verification'); 
} 

в

function verification(){ 
parent::print_me ('Log: while verification'); 
} 

, но это не работает, либо я не добавлять значения в выходной переменной main_class, так что я могу напечатать наконец все журналы

+0

Отсутствует '' 'sigin в методе проверки? Должно быть '$ this-> print_me()'. – marian0

+0

Придерживайтесь метода 1, но введите '$' infront '$ this-> print_me (....)' Подклассы имеют автоматический доступ к свойствам родительского класса, как если бы они были их собственными. Единственная проблема заключалась в отсутствии «$» и что вы должны запускаться с отключенным display_errors, так как это должно было сгенерировать ошибку компиляции. – RiggsFolly

+0

Отсутствие «$» было только опечаткой, даже префикс $ не добавлял значения вместе в родительский класс, как я полагаю, из-за разных экземпляров, однако, я думал, что если у меня будет совершенно отдельный третий класс, содержащий только функцию print_me и и как-то я называю это во всех классах и в объектах. –

ответ

1

Вы должны использовать как этот

$sub_class = new sub_class(); 
$sub_class->verification ('Log: from main.php 1 '); 
$sub_class->verification ('Log: from main.php 2 '); 
echo $sub_class->output; 

просто использовать подкласс объект, чтобы получить журнал.

Основной объект класса не смог вернуть вам ничего из-за полиморфизма.

+0

Как вы говорите, в моем скрипте будет много изменений, возможно, мне пришлось пройти через 10 000 строк кода, чтобы изменить этот способ, лучше я нахожу решение для добавления значения только из sub_class, его самого маленького класса, и мне приходилось изменить только несколько строк. –

Смежные вопросы