Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> private члены в базовых и наследующих классах 
:(
    Опции темы
MyDarkSide
Дата 9.11.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 21.3.2008

Репутация: -1
Всего: -1



Собсно код:
Код

  Class B {
    private $a = "B" ;
    function __construct() {
      $this->a = "C";
    }
  }
  
  Class A extends B {
    public $a = "A" ;
  }
  
  
  $c = new A;
  print_r( $c );
  echo  serialize( $c ) ;


вывод:
Цитата

A Object
(
    [a] => A
    [a:private] => C
)

O:1:"A":2:{s:1:"a";s:1:"A";s:4:"Ba";s:1:"C";}


то что публичный член класса A не переопределил приватный член класса B - понятно так и должно быть, но как и самое главное ЗАЧЕМ приватный член базового класса попал в наследующий класс ?? 
причем речь идет не об ошибке распарсивания , приватный член базового класса изменяется динамически.
Я бы понял (и простил  smile  ) это для print_r , хотя тоже странно - это же нарушение инкапсуляции, я даже знать ничего не должен о приватных членах базового класса, но зачем мне это счастье в serialize ?? если я хочу сохранить объект в файлик например

Это сообщение отредактировал(а) MyDarkSide - 9.11.2009, 11:29
PM ICQ   Вверх
NewDima
Дата 9.11.2009, 17:35 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



MyDarkSide, ты думаешь, если с помощью serialize не будут сохранены private члены базового класса, то после unserialize ты сможешь восстановить первоначальное состояние  объекта?
Инкапсуляция скрывает от кода, не имеющего права на доступ, помеченный члены класса, но как это должно относиться к serialize-у? Сохранили состояние объекта (а в него входят все члены класса, родительского класса и так далее) и все.
PM ICQ   Вверх
MyDarkSide
Дата 9.11.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 21.3.2008

Репутация: -1
Всего: -1



NewDima,  хороший вопрос..  
значит, если сохранять объект в файл, то либо у него не должно быть родителей (либо они должны содержать только методы) 
либо сохранять своим методом без сериализа 
PM ICQ   Вверх
NewDima
Дата 10.11.2009, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



Возьми любой компилируемый язык с ООП, вот сделаешь ты дамп памяти, где содержится экземпляр определенного класса. Думаешь ты не увидишь там private членов родительских классов? А где им тогда храниться?
Так и здесь, зачем пялиться на результат сериалайза (параллель с дампом)?
PM ICQ   Вверх
sTa1kEr
Дата 11.11.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Для сериализации объектов существует интерфейс Serializable.
PM MAIL   Вверх
NewDima
Дата 11.11.2009, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



sTa1kEr, вы к чему это? Человек спрашивает, почему видно состояние объекта, которое скрывается в private секции
PM ICQ   Вверх
sTa1kEr
Дата 11.11.2009, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



NewDima,  это вот к этому:
Цитата(MyDarkSide @  9.11.2009,  19:05 Найти цитируемый пост)
значит, если сохранять объект в файл, то либо у него не должно быть родителей (либо они должны содержать только методы) 
либо сохранять своим методом без сериализа  


Добавлено через 1 минуту и 20 секунд
Если сохранять объект в файл, то он должен реализовывать интерфейс Serializable. Это хорошая практика.
PM MAIL   Вверх
MyDarkSide
Дата 12.11.2009, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 21.3.2008

Репутация: -1
Всего: -1



sTa1kEr,  спасибо за наводку!

Добавлено через 8 минут и 33 секунды
Цитата(NewDima @  11.11.2009,  10:42 Найти цитируемый пост)
sTa1kEr, вы к чему это? Человек спрашивает, почему видно состояние объекта, которое скрывается в private секции 

Вопроса два - именно этот ( и нет ли в связи с этим проблем с безопасностью) и второй именно про сериализ - зачем мне в файле лишние данные.


  
PM ICQ   Вверх
SneG0K
Дата 12.11.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



Цитата(MyDarkSide @  9.11.2009,  10:28 Найти цитируемый пост)
ЗАЧЕМ приватный член базового класса попал в наследующий класс ?? 

Может автар попутал приват и протектед?
PM WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1306 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.