|
|
|
| Доброго времени суток. Если очень очень грубо, то код выглядит так.....
Вариант 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;
}
}
Как правильнее сделать? С какими проблемами столкнусь в первом и втором варианте? | |
|
|
|
|
|
|
|
для: jonik
(24.03.2012 в 20:33)
| | Очень много вопросов ко второму варианту? Он у вас точно работает? Просто вы из базового класса вызываете метод наследника... в общем не самая удачная идея, идущая в обход наследования... funcb() будет у всех наследников? Если да, то лучше завести абстрактный метод. Или не выеживаться и использовать первый метод.
PS А по существу мало что можно сказать в такой абстрактной форме, для каких целей строите иерархию классов? | |
|
|
|
|
|
|
|
для: 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 мы просто добавляем в параметр флаг, что он не корректный, и что делать дальше - решают контроллеры..... | |
|
|
|