Я создаю небольшую мультиклассовую систему, которая расширяет друг друга. Допустим, класс 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!
)
Может ли кто-нибудь помочь мне с этим?
Это потому, что вы объявили все свои переменные класса как private
, Это делает так, что только класс, где они были объявлены, может получить к ним доступ. Даже подклассы (производные классы) не могут их видеть.
Если вам нужны подклассы для доступа к переменным родительского класса, вы должны объявить их как protected
,
Вы должны использовать protected
вместо private
!
Пытаться
protected $head;
protected $out;