Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ООП Как правильнее сделать?
 
 автор: jonik   (24.03.2012 в 20:33)   письмо автору
 
 

Доброго времени суток. Если очень очень грубо, то код выглядит так.....

Вариант 1.

class a{
protected static $var=false;

public static function funca(){
b::funcb();
}
}

class b extends a{
protected static function funcb(){
self::$var=true;
}
}


2 вариант.

class a{
protected static $var=false;

public static function funca(){
self::$var=b::funcb();
}
}

class b extends a{
protected static function funcb(){
$var=true;
return $var;
}
}

Как правильнее сделать? С какими проблемами столкнусь в первом и втором варианте?

  Ответить  
 
 автор: cheops   (25.03.2012 в 13:00)   письмо автору
 
   для: jonik   (24.03.2012 в 20:33)
 

Очень много вопросов ко второму варианту? Он у вас точно работает? Просто вы из базового класса вызываете метод наследника... в общем не самая удачная идея, идущая в обход наследования... funcb() будет у всех наследников? Если да, то лучше завести абстрактный метод. Или не выеживаться и использовать первый метод.

PS А по существу мало что можно сказать в такой абстрактной форме, для каких целей строите иерархию классов?

  Ответить  
 
 автор: jonik   (25.03.2012 в 19:02)   письмо автору
 
   для: cheops   (25.03.2012 в 13:00)
 

Работают оба варианта... Тут даже вопрос не в построении иерархии. Попробую по-другому.... есть глобальная переменная (конечно в пределах класса и всех его наследников). Запускаем метод и он меняет значение этой переменной. Есть 2 варианта как это реализовать.
1. Прямо внутри метода устанавливается новое значение этой переменной. т.е достаточно просто запустить этот метод self::method();
или..............
2. Метод возвращает новое значение и нужно делать так.... self::$global=self::method();


А для каких целей я это сторою?.... Вот кстати важное замечание по поводу того, что плохо из базового класса запускать методы производного класса.....
Делаю, точнее переделываю обработчик входных параметров...
Базовый класс....... в нем содержиться конструктор (т.е. создаем только его экземпляр) и в нем же происходит непосредственно запуск проверки, определение контроллера.... т.е. последовательно проверяем все что пришло GET, POST, SERVER и т.п., также в нем содержатся общие методы для всех наследников.... напрмеир проверка - явяется ли параметр числом и укладывается ли оно в заданный диапазон и т.п.

Есть наследник - GET... т.е. класс в котором содержаться методы нужные только для проверки URL.... а именно.. чтобы небыло лишних параметров в ссылке, чтобы параметры шли в строгой очередности т.е. чтобы на страницу можно бьыло попасть по строго правильной ссылке.. Ну и конечно в нем доступны все методы базового класса.....

Есть наследник POST... соответственно содержатся методы, которые специфичны только для POST... хотя скорее всего новых методов там не будет и будут использоваться базовые.....

в каждом классе (кроме базового там стоит заглужка) есть метод, который вызывается, если параметры не прошли проверку..... но в каждом классе он разный..... Напрмиер в GET, если сслыка по любой причине не прогшла проверку, следует 404. в POST мы просто добавляем в параметр флаг, что он не корректный, и что делать дальше - решают контроллеры.....

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования