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

12
D
На сайте с 28.06.2008
Offline
1108
902

Прохожу курс по 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
Offline
140
#2
Если это твой класс, и хочешь чтобы свойства были доступны, то делай public. protected делают чтобы свойство было доступно классу который наследуется через extends, но не доступно другим.
IS
На сайте с 16.08.2006
Offline
160
#3
Можно еще рефлексию использовать.
W1
На сайте с 22.01.2021
Offline
306
#4
Dram :
$this->user

А где там  user?

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

А где там  user?

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

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

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

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

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


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

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

12

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