PHP ООП Передача переменных из дочернего класса в родительский абстрактный

(Ответов: 16, Просмотров: 3451)
Страница 1 из 2 12 Последняя
  1. [web-developer] Аватар для cOAPerator
    • Регистрация: 22.02.2011
    • Сообщений: 615
    • Репутация: 111
    • Webmoney BL: ?
    Всем привет, давненько я не писал на форуме Начал потихой читать маны по ООП вот.. Почувствовал себя как в детском садике. Собственно сабж

    PHP код:
    abstract class ACore {
        
    /// много кода )
        
        
    public function get_body($easytooltip,$copyright){
            
    $this->get_header($easytooltip);
            
    $this->get_left_bar();
            
    $this->get_contents();
            
    $this->get_footer($copyright);
        }

    PHP код:
    class main extends ACore {
        
        public 
    $title "Все о программировании и сайтостроении!";
        public 
    $meta_keywords "программирование, сайтостроение";
        public function 
    get_contents(){
        
        
    /// снова много кода )
        
        

    Как передать переменные $title и $meta_keywords из дочернего класса в родительский абстрактный ?
    • 0
  2. Шаман Аватар для Boss199999
    • Регистрация: 18.04.2011
    • Сообщений: 416
    • Репутация: 105
    Описать сразу все в родительском и при наследовании у дочернего все будет.
    • 1

    Спасибо сказали:

    cOAPerator(10.07.2013),
  3. Дипломник
    • Регистрация: 10.07.2011
    • Сообщений: 149
    • Репутация: 23
    Цитата Сообщение от cOAPerator Посмотреть сообщение
    $title и $meta_keywords из дочернего класса в родительский абстрактный
    1. В абстрактный класс ты ничего не передашь, а вот в его реализации можешь
    2. Переменные ($title и $meta_keywords) должны быть объявлены в абстрактном классе, а не в дочернем. Тогда к ним будет доступ через ссылку на родительский класс.
    3. Ты объявляешь "public $title = ..." в классе main. Соответственно эта переменная и доступна в main и дочерних от него (Acore не знает и знать не может об этой переменной).
    • 1

    Спасибо сказали:

    cOAPerator(10.07.2013),
  4. [web-developer] Аватар для cOAPerator
    • Регистрация: 22.02.2011
    • Сообщений: 615
    • Репутация: 111
    • Webmoney BL: ?
    сделал. работает. НО чето понять не могу, как работает..
    сделал вот так:
    PHP код:
    abstract class ACore {

        protected function 
    get_header($easytooltip){
            
    //добавил это
            
    $title $this->title;
            
    $meta_description $this->meta_description;
            
    $meta_keywords $this->meta_keywords;
            include_once (
    "template/hyperione/meta.php");
            include_once (
    "template/hyperione/header.php");
        } 
    PHP код:
    class main extends ACore {
        
    // и добавил вот это    
        
    public $title "StarNOX.ru - Все о программировании и сайтостроении!";
        public 
    $meta_description "Все о программировании и сайтостроении!";
        public 
    $meta_keywords "программирование, сайтостроение";

    но понять не могу, $this->title это ведь ссылка на существующую переменную.. а где она?

    ПС: чето я гоню)) main то наследует свойства ACore, соответственно теперь в main есть $title = $this->title; потому и работает ) ппц, надо спать больше)
    -----------------------------------------------------------
    ППС: только я если правильно понимаю, нуно еще добавить protected $title; в начало ACore, чтобы ошибок не было, верно ? или не надо?
    Последний раз редактировалось cOAPerator; 10.07.2013 в 05:37.
    • 0
  5. [web-developer] Аватар для cOAPerator
    • Регистрация: 22.02.2011
    • Сообщений: 615
    • Репутация: 111
    • Webmoney BL: ?
    Назрел еще 1 вопрос. скорее чисто организационный, чем технический, но тоже касаемо ооп.

    када писал админку на старом сайте в процедуре, была строка в одном из файлов для личного кабинета header("Location: /"); срабатывала она в случае разлогинивания. Теперь не катит, так как в ООП подходе некоторые классы подгружаются раньше этой строки, соответственно имеет место ошибка.

    перенести в другой класс нереально, потому что условие срабатывания в этом файле.

    Че делать? Кто что подскажет ?
    • 0
  6. [web-developer] Аватар для cOAPerator
    • Регистрация: 22.02.2011
    • Сообщений: 615
    • Репутация: 111
    • Webmoney BL: ?
    какая тишина на сайте... аж жутко...
    • 0
  7. Студент
    • Регистрация: 24.01.2013
    • Сообщений: 94
    • Репутация: 14
    • Webmoney BL: ?
    cOAPerator, не понял. В случае "разлогивания" у Вас происходила переадресация с URL'ов админки в корень сайта? Тогда проверка доступа должна быть организована до вызова методов (например, в конструкторе в родителя).

    В общем, переформулируйте вопрос.
    • 0
  8. [web-developer] Аватар для cOAPerator
    • Регистрация: 22.02.2011
    • Сообщений: 615
    • Репутация: 111
    • Webmoney BL: ?
    Цитата Сообщение от ap0stal Посмотреть сообщение
    В случае "разлогивания" у Вас происходила переадресация с URL'ов админки в корень сайта?
    да, так оно и есть
    • 0
  9. Sunshine reggae Аватар для OKyJIucT
    • Регистрация: 02.09.2011
    • Сообщений: 3,240
    • Репутация: 1830
    • Webmoney BL: ?
    Цитата Сообщение от cOAPerator Посмотреть сообщение
    када писал админку на старом сайте в процедуре, была строка в одном из файлов для личного кабинета header("Location: /"); срабатывала она в случае разлогинивания. Теперь не катит, так как в ООП подходе некоторые классы подгружаются раньше этой строки, соответственно имеет место ошибка.

    перенести в другой класс нереально, потому что условие срабатывания в этом файле.

    Че делать? Кто что подскажет ?
    Может попробовать в том месте, где было header("Location: /"); вызвать метод из другого класса, куда "перенести не реально", и в этом методе сделать header("Location: /");?

    Не знаю, насколько это правильно и красиво, но это первое, что приходит мне в голову)
    • 0
  10. [web-developer] Аватар для cOAPerator
    • Регистрация: 22.02.2011
    • Сообщений: 615
    • Репутация: 111
    • Webmoney BL: ?
    Цитата Сообщение от OKyJIucT Посмотреть сообщение
    Может попробовать в том месте, где было header("Location: /"); вызвать метод из другого класса, куда "перенести не реально", и в этом методе сделать header("Location: /");?
    попробовал, не работает. ошибка та же.
    • 0
Страница 1 из 2 12 Последняя

Похожие темы

Темы Раздел Ответов Последний пост
Передача переменных в функциях
Web программирование 3 11.01.2013 17:10
Требуется помощь с настройкой вывода дочернего элемента в меню Joomla
Joomla 6 12.12.2012 20:50
Курс Настройка шаблона WordPress премиум-класса Striking
Дизайн сайтов, графика 1 17.10.2011 01:22
Быдлодизайн, как особенность коммерчески успешного продукта эконом класса
Оффтоп и свободные темы 5 17.06.2011 13:42

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры