StUV
Rotaredom
[PHP5]: Классы - проблема с наследованием
Проблема такая - пусть есть такая структура:
В итоге:
c2:
ubl_func_c2
c1:
ubl_func_c1
c1:
riv_func
Fatal error: Cannot access private property c2::$var3 in ... on line ...
Собственно вопроса два:
1. Как "поизящнее" (что ли?) реализовать запрет вызова private метода класса методами его дочернего класса?
2. Как "проансетить" в методе дочернего класса унаследованные protected переменные-члены используя деструктор базового класса, не трогая собственные (т.е. дочернего класса) private переменные?
Всем спасибо.
-~{}~ 20.01.05 10:32:
Размышлений над упрощенным вариантом такой структуры сняли первый вопрос (ошибка проектирования ;-).
А вот как быть со вторым вопросом - не ясно....
Проблема такая - пусть есть такая структура:
PHP:
class c1 {
private $var1 = 'some';
protected $var2 = 'some';
public function __construct() {}
public function __destruct() {
$cvars = get_class_vars(get_class($this));
foreach ($cvars as $name => $value)
unset($this->{$name});
}
private function priv_func() {
echo 'c1::priv_func<BR>';
}
public function publ_func_c1() {
echo 'c1::publ_func_c1<BR>';
$this->priv_func();
}
}
class c2 extends c1 {
private $var3 = 'some';
public function __construct() {}
public function publ_func_c2() {
echo 'c2::publ_func_c2<BR>';
$this->publ_func_c1();
}
}
ini_set('display_errors', 'On');
$foo = new c2;
$foo->publ_func_c2();
$foo->__destruct();
c2:

c1:

c1:

Fatal error: Cannot access private property c2::$var3 in ... on line ...
Собственно вопроса два:
1. Как "поизящнее" (что ли?) реализовать запрет вызова private метода класса методами его дочернего класса?
2. Как "проансетить" в методе дочернего класса унаследованные protected переменные-члены используя деструктор базового класса, не трогая собственные (т.е. дочернего класса) private переменные?
Всем спасибо.
-~{}~ 20.01.05 10:32:
Размышлений над упрощенным вариантом такой структуры сняли первый вопрос (ошибка проектирования ;-).
А вот как быть со вторым вопросом - не ясно....