Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Объект в объекте на PHP>v5.3
Покинул форум
Сообщений всего: 82
Дата рег-ции: Июнь 2010 Откуда: Харківська обл. с. Криштопівка
Помог: 0 раз(а)
Начинаю более подробно изучать ООП на PHP>v5.3.
Главный вопрос: "PHP>v5.3 не предоставляет возможность делать вложенные один в другой объекты?".
Практикуя процедурное программирование на РНР, увидел, что большие проекты стают очень плохо управляемые без ООП.
Наверное, грубо говоря, удобство организации процедурного программирования в сравнении с удобством программирования на ООП можно образно представить как удобство пользования автомобильным транспортом и метро соответственно. Если дороги не загружены, то удобнее пользоваться автомобилем, в противном случае метро будет значительно эффективнее. (Ого! Аж самому понравилось сравнение. =)
Так вот, возвращаясь к главному вопросу, хочу сделать область видимости переменных в зависимости от вложенности, тоесть древовидную структуру зависимости одних объектов от других.
Конечно же я видел возможность создавать родительские и дочерние объекты, но при этой схеме дочернему объекту передаются все родительские свойства и методы, что мне почти совсем не подходит.
Неужели PHP>v5.3 предоставляет возможность только линейной зависимости между объектами? Посоветуйте, плиз, что нибудь полезное в этом плане.
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
есть модификаторы видимости private которые закроют переменные(свойства) и методы от классов наследников
----- Just do it
like_you
Отправлено: 28 Марта, 2012 - 23:41:45
Гость
Покинул форум
Сообщений всего: 82
Дата рег-ции: Июнь 2010 Откуда: Харківська обл. с. Криштопівка
Помог: 0 раз(а)
Panoptik пишет:
есть модификаторы видимости private которые закроют переменные(свойства) и методы от классов наследников
Наверное я тогда на примере покажу в каких случаях мне почти совсем не подходит наследование.
Например, допустим я хочу создать родительский объект "Россия" со свойствами типа територия, население... и т.д. Потом я хочу создать дочерний объект "область России"... Ха, ха =) Сейчас подумал может мне это и подходит, в случае если при создании дочернего объекта не будет выделятся память со стороны РНР для закрытых свойств и методов родительского объекта
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010 Откуда: Даугавпилс, Латвия
Помог: 52 раз(а)
like_you пишет:
мне почти совсем не подходит наследование.
Скрыть некоторые свойства базового класса от наследника стоит применить, как сказано выше, модификатор видимости private, это в случае наследования. В случае композиции делай аксессоры, они же методы доступа. Это конечно если я тебя правильно понял
DeertOff
Отправлено: 29 Марта, 2012 - 00:04:31
Гость
Покинул форум
Сообщений всего: 126
Дата рег-ции: Июль 2011
Помог: 3 раз(а)
Можно создать Класс - область России
а в России свойство(переменную, ссылку) на обьект класса область России
like_you
Отправлено: 29 Марта, 2012 - 00:08:20
Гость
Покинул форум
Сообщений всего: 82
Дата рег-ции: Июнь 2010 Откуда: Харківська обл. с. Криштопівка
Помог: 0 раз(а)
DeertOff пишет:
Можно создать Класс - область России
а в России свойство(переменную, ссылку) на обьект класса область России
Ну а если я хочу со стороны области увидеть кто у меня родитель? (Добавление)
Кстати, интересно что, действительно получается, что именно объект Россия зависима и видит более мелкие объекты в себя внутри.
Получается у меня два варианта. Хм, интересно...
Покинул форум
Сообщений всего: 82
Дата рег-ции: Июнь 2010 Откуда: Харківська обл. с. Криштопівка
Помог: 0 раз(а)
DeertOff пишет:
тогда лучьше использовать наследование с private как писали выше =)
Всем спасибо! Уже есть что поэкспериментировать. Интересно теперь как же, реально РНР будет выделять память, например в случае если объект очень большой и от него создается дочерний объект с единственным открытым свойством. Дочерний объект будет в памяти РНР размером "в одно свойство"?
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
like_you
Нет. То, что Вы увидели - это особенность исключительно var_dump (эта функция применяется для отладки и потому отображает даже скрытые свойства).
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
like_you
Отправлено: 29 Марта, 2012 - 10:22:29
Гость
Покинул форум
Сообщений всего: 82
Дата рег-ции: Июнь 2010 Откуда: Харківська обл. с. Криштопівка
Помог: 0 раз(а)
Выводит:
Цитата:
object(B)#1 (3) { ["a":"A":private]=> string(154) "
Ожидаю, что значение приватной переменной a не будет передаватся дочерним классам" ["b":"A":private]=> string(154) "
Ожидаю, что значение приватной переменной b не будет передаватся дочерним классам" ["c":protected]=> string(131) "
Единственное значение, которое я хочу передать всем дочерним классам" }
(Добавление)
EuGen пишет:
like_you
Нет. То, что Вы увидели - это особенность исключительно var_dump (эта функция применяется для отладки и потому отображает даже скрытые свойства).
Другими словами то что выводит эта функция на самом деле не верно?
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
like_you пишет:
Другими словами то что выводит эта функция на самом деле не верно?
можно и так выразится. она используется как уже сказали для дебага чтобы наглядно видеть что и где находится и в каком виде, а для проверки возьмите просто обратитесь к закрытому свойству класса родителя в наследнике. ошибок у вас не выведется, но и данных хранимых в них вы тоже не получите
Покинул форум
Сообщений всего: 82
Дата рег-ции: Июнь 2010 Откуда: Харківська обл. с. Криштопівка
Помог: 0 раз(а)
Panoptik пишет:
можно и так выразится. она используется как уже сказали для дебага чтобы наглядно видеть что и где находится и в каком виде, а для проверки возьмите просто обратитесь к закрытому свойству класса родителя в наследнике. ошибок у вас не выведется, но и данных хранимых в них вы тоже не получите
Ну то что ничего не выдается при обращении к закрытым свойствам, возможно, не означает, что РНР не выделяет память под эти закрытые свойства для дочерних классов. Тоесть если при наследовании от родительского огромного объекта я пробую унаследовать только единственное "маленькое protected свойство", то вместо этого дочерний объект будет иметь несовсем понятный баласт, при обращении к которому ничего не происходит, причем этот баласт, похоже, будет в памяти иметь размер родительского класса
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Ну то что ничего не выдается при обращении к закрытым свойствам, возможно, не означает, что РНР не выделяет память под эти закрытые свойства для дочерних классов
память выделяется под ОБЪЕКТЫ а не под классы. Объекты не бывают дочерними или родительскими.
Цитата:
то вместо этого дочерний объект будет иметь несовсем понятный баласт, при обращении к которому ничего не происходит, причем этот баласт, похоже, будет в памяти иметь размер родительского класса
какой баласт? это будет тот же самый участок памяти
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.