Ответы пользователя по тегу ООП
  • Как получить массив атрибутов класса используя get_object_vars в родителе?

    nonlux
    @nonlux
    Melkij +1
    родительский класс не будет видеть private метод объявленные в наследниках.
    На пальцах ООП тут работает так:
    Catalog->__toString() на сам деле работает так Catalog::parent->__toString() (т.е функция вызывается в контексте Table)
    Если уж очень хочется именно через get_object_vars, то он должен вызываться у наследников. Как вашем комментарии или так:
    <?php                                                                                                                                                                                       
                                                                                         
      class Catalog extends Table {                                                      
        private $type;                                                                   
        private $desc;                                                                   
        protected $prot;                                                                 
        public $pub;                                                                     
                                                                                         
        protected function getMetods() {                                                 
          $vars = get_object_vars($this->self);                                          
          return array_keys($vars);                                                      
        }                                                                                
                                                                                         
      }                                                                                  
                                                                                         
      abstract class Table {                                                             
        public $perPub;                                                                  
        protected $perProt;                                                              
        private $perPriv;                                                                
        protected $self;                                                                 
        abstract protected function getMetods();                                         
        public function __toString() {                                                   
          return implode(', ', $this->getMetods());                                      
        }                                                                                
      }                                                                                  
                                                                                         
      $o=new Catalog();                                                                  
                                                                                         
      echo (string) $o;
    Ответ написан
    2 комментария