Как получить protected свойство объекта php?

12
D
На сайте с 28.06.2008
Offline
1104
863

Прохожу курс по OOП, обратной связи нет, а разобраться хочется.

В общем есть у меня такой объект

Хочу получить его свойство role

но ни $this->user->role ни $this->user['role'] не прокатывает. Это первый вопрос - как получить это свойство?

У меня одна мысль - в модели делать геттер на получение этого свойства, по другому никак?

В процессе гугления первого вопроса, родился второй, почему код

      foreach($this->user as $key => $value) {
            print "$key => $value\n";
        }

Вообще ничего не выводит - ни ошибок ни данных?

edogs software
На сайте с 15.12.2005
Offline
775
#1
Dram :

0) Читайте мануал в первую очередь. Там 99% базовых вопросов освещено. Курсы это вольный пересказ части мануала. Начните вообще с того, что просто тупо прочтите мануал по объектам пхп. Родной.
1) К protected можно получать доступ только из а) самого класса б) родителей в) наследников.
К private только из него самого.
Так что да - если надо снаружи получить - только геттер. Если в наследнике - то напрямую.
2) Вы концепцию protected понимаете? Это спрятанное свойство, снаружи не видное. Вы пытаетесь пролистать $this->user но не видите в нем ничего, т.к. все свойства спрятанные.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
ArbNet
На сайте с 27.10.2019
Online
129
#2
Если это твой класс, и хочешь чтобы свойства были доступны, то делай public. protected делают чтобы свойство было доступно классу который наследуется через extends, но не доступно другим.
Собираю команду для совместной работы, так же можете там понаблюдать как я работаю и пообщаться со мной ;) https://discord.gg/CmckMR3jg2
IS
На сайте с 16.08.2006
Offline
158
#3
Можно еще рефлексию использовать.
W1
На сайте с 22.01.2021
Offline
304
#4
Dram :
$this->user

А где там  user?

Мой форум - https://webinfo.guru –Там я всегда на связи
edogs software
На сайте с 15.12.2005
Offline
775
#5
webinfo #:

А где там  user?

в $this :)
D
На сайте с 28.06.2008
Offline
1104
#6
Еще вопрос из той же области - мне нужно написать систему комментариев. Я ее написал и в модель статьи прокинул объект со всеми комментами для данной статьи. 
Все свойства каждого коммента опять протектед.
Как в этом случае правильнее вывести комменты во вьюшке?
В момент получения ответа из базы писать ответ в паблик свойство и уже его выводить во вьюшку?
edogs software
На сайте с 15.12.2005
Offline
775
#7
Dram #:
Еще вопрос из той же области - мне нужно написать систему комментариев. Я ее написал и в модель статьи прокинул объект со всеми комментами для данной статьи. 
Все свойства каждого коммента опять протектед.
Как в этом случае правильнее вывести комменты во вьюшке?
В момент получения ответа из базы писать ответ в паблик свойство и уже его выводить во вьюшку?
Вы, собственно, с какой целью их сделали протектед? Для чего? Просто из принципа?
В большинстве нормальных случаев протектед/привате делают для того, что бы они были недоступны снаружи и соответственно тут же пишут геттер и (опционально) сеттер, через которые потом свойства и берут.
Сделать протектед и тут же вывалить эти свойства в паблик это шаг вперед - два назад:)
W1
На сайте с 22.01.2021
Offline
304
#8
Dram #:
В момент получения ответа из базы

Вы как-то преобразуете ответ из базы? Ведь в PHP есть функции работы с базой данных, для которых не надо лезть в эти дебри. Классы существуют немного для других целей - а именно для хранения объектов и их обработки в процессе работы скрипта.

D
На сайте с 28.06.2008
Offline
1104
#9
Наверное неправильно сформулировал - объект из базы уже приходит с протектед свойствами.
Не пойму от чего это зависит? 

От класса работы с базой или от модели в которой идет вызов в базу?

Вот мой запрос


W1
На сайте с 22.01.2021
Offline
304
#10
Dram #:
объект из базы уже приходит с протектед свойствами.
Не пойму от чего это зависит? 
От класса работы с базой или от модели в которой идет вызов в базу?

От того, что работаете непосредственно с классом базы, а не с методами этого класса.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий