[PHP5]: Классы - проблема с наследованием

StUV

Rotaredom
[PHP5]: Классы - проблема с наследованием

Проблема такая - пусть есть такая структура:
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::publ_func_c2
c1::publ_func_c1
c1::priv_func
Fatal error: Cannot access private property c2::$var3 in ... on line ...

Собственно вопроса два:
1. Как "поизящнее" (что ли?) реализовать запрет вызова private метода класса методами его дочернего класса?

2. Как "проансетить" в методе дочернего класса унаследованные protected переменные-члены используя деструктор базового класса, не трогая собственные (т.е. дочернего класса) private переменные?

Всем спасибо.

-~{}~ 20.01.05 10:32:

Размышлений над упрощенным вариантом такой структуры сняли первый вопрос (ошибка проектирования ;-).
А вот как быть со вторым вопросом - не ясно....
 

vladax

Новичок
Может эти аргументы поделить как бы на 2 типа и засунуть в 2 массива, которые (все же придется) объявлять в конструкторе класса? и тогда в методе destruct предусмотреть параметр указывающий на тип подлежащих ансету переменных..
Какой то огород получается :(
 

svetasmirnova

маленький монстрик
Re: [PHP5]: Классы - проблема с наследованием

Originally posted by StUV
Размышлений над упрощенным вариантом такой структуры сняли первый вопрос (ошибка проектирования ;-).
А вот как быть со вторым вопросом - не ясно....
А какая версия PHP?
Мой 5.1 ошибок не выдаёт
 
Сверху