ООП и наследование

Тема в разделе "PHP", создана пользователем Deller, 18 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Deller

    Deller Создатель

    Регистр.:
    24 фев 2008
    Сообщения:
    34
    Симпатии:
    16
    Приветствую. Возник такой вопрос. Есть базовый класс в неком методе вызывающий свой класс расширение, в том же методе задается одно из протектед свойств класса. Каким образом можно из класса расширения вызвать ето свойство с полученным значением не вызывая свойство базового класса. Для понимания приведу простейший пример
    Код:
    class Page
    {
           protected $newSys;
           protected function action()
           {
                $this->newSys = 'data';
                $obj = new classHTML();
           }
    }
    
    
    class classHTML extends Page{
       function GetNewSys
               {
                   return $this->newSys;
               }
    }
    

    передавать параметр через глобали, или параметром вызова classHTML не хотелось бы. Глобали ето не оч хорошо с точки зрения безопасности, а параметром нарушается полиморфизм системы чего не хотелось бы делать.
    Зы Создание в Page функции возвращающей значение newSys не дало результата, ибо возвращается пустое значение.
     
  2. semakos

    semakos Постоялец

    Регистр.:
    26 окт 2008
    Сообщения:
    63
    Симпатии:
    14
    Я предлагаю сделать так - передавать переменную все таки через конструктор, в котором нужно определить параметр по умолчанию:

    Код:
    .....
    class classHTML extends Page {
    
       function classHTML($n_data='') {
                if($n_data)
                $this->newSys=$n_data;
            }
    ....
    
    И теперь можно создавать объект и с параметром и без:

    Код:
    class Page
    {
           protected $newSys;
           protected function action()
           {
                $this->newSys = 'data';
                $obj = new classHTML($this->newSys);
                echo $obj->GetNewSys();
           }
     }
    
    И
    Код:
    $obj = new classHTML();
    
     
  3. Deller

    Deller Создатель

    Регистр.:
    24 фев 2008
    Сообщения:
    34
    Симпатии:
    16
    Сделал проще. Стал параметром передавать обьект класса парента. Не слишком экономично в плане памяти зато загнав в свойства класса парента все что нужно сохраняю единообразие в классах расширениях. Спасибо за желание помочь.
     
Статус темы:
Закрыта.