class — PHP стековые классы ничего не возвращают

Я создаю небольшую мультиклассовую систему, которая расширяет друг друга. Допустим, класс a является «ядром» и работает как оболочка для проверки / администрирования. класс б, чтобы проверить, что $d is и вызвать метод класса c, пользовательский класс, если он существует, или вызвать ошибку для класса back.

Вот мой код:

<?php

class a {

private $error;
private $ok;

public function __construct() {

$this->error    = array();
$this->ok       = array();

// do other stuff here
}
}

class b extends a {

private $head;
private $out;

public function __construct() {

parent::__construct();

global $d;

$this->head = "";
$this->out  = "";

if(method_exists($this,$d)) {
$this->{$d}();
} else
$this->error[] = "method '$d' not found";
}

public function output() {
return ($this->head==""?"":'<h1>'.$this->head.'</h1>').$this->out;
}
}

class c extends b {

private $me = "inside c";

public function standard() {

$this->head = "Heading";
$this->out  = "it works!";

}

}

$d      = "standard";
$c      = new c();

echo "<pre>".print_r($c,true)."</pre>";
echo $c->output();

?>

если я побежал $c->output() ничего не возвращает, но print_r() возвращает это:

c Object
(
[me:c:private] => inside c
[head:b:private] =>
[out:b:private] =>
[error:a:private] => Array
(
)

[ok:a:private] => Array
(
)

[head] => Heading
[out] => it works!
)

Может ли кто-нибудь помочь мне с этим?

0

Решение

Это потому, что вы объявили все свои переменные класса как private, Это делает так, что только класс, где они были объявлены, может получить к ним доступ. Даже подклассы (производные классы) не могут их видеть.

Если вам нужны подклассы для доступа к переменным родительского класса, вы должны объявить их как protected,

http://php.net/manual/en/language.oop5.visibility.php

2

Другие решения

Вы должны использовать protected вместо private!

Пытаться

protected $head;
protected $out;
1