Каким образом обратиться к геттеру?!!!
В классе есть геттер: public function getStockname()
Если я в цикле делаю:
echo $stock->getStockname();
То получаю ошибку:
Notice: Trying to get property of non-object
templton1982: Читайте про ООП в PHP и вообще про ООП. Вы сами себе палки в колёса вставляете и удивляетесь проблемам. А всё потому, что вы не понимаете, что вы делаете.
Алексей Скобкин: Охххх... Тяжелый случай. Я, конечно, не супер спец, но понимаю, что к protected обращаться снаружи нельзя. Вот я и спрашиваю, как обратиться через геттер. А пример обращения к protected я написал для того, что бы особо умные грамотеи не писали это примером к действию (это я не про вас, а в принципе про многих пользователей форумов, которые отвечают первое, что придет в голову). Я ж понимаю, что у меня есть результат в цикле $stock - это по идее экземпляр сущности Stock. И когда я обращаюсь через геттер: echo $stock->getStockname(); то ничего не получается. На самом деле, тот, кто действительно понимает в symfony, сказал бы что-то вроде: $stock - в данном случае не будет экземпляром сущности Stock, а будет, например, collection, внутри которого, конечно же, нет геттера из сущности Stock. Кстати, если знаете, как разобрать $user_avalable_stocks в контроллере, то я, к сожалению, по прежнему не знаю. Тот способ, что я описал - считаю костылем. В twig передается $user_avalable_stocks и там нормально разбирается. Очень надеюсь на ваши искренние знания symfony, а также на то, что вы читали про ООП и разбираетесь в нем, и на то, что вы, глядя на приведенный мною код, понимаете, что в нем написано, и особо сильно надеюсь на то, что вам как человеку умеющему использовать принципы ООП, не составит труда подсказать мне решение столь незамысловатой задачи...
Сергей Протько: Ну, удивительные вы люди! Будто я не понимаю, что нужно обратиться к геттеру. И прекрасно понимаю, что нельзя обращаться к protected. Я это написал для примера (читайте ниже для какого). Вопрос по самому устройству symfony - где именно нужно обратиться к геттеру? Если в цикле $stock - это не объект, а, значит, и не экземпляр сущности Stock, то где тогда будет этот экземпляр? Кстати, если знаете решение, то я по-прежнему этого решения не знаю. Может с высоты высокого профессионализма и опыта снизойдете и подскажите-таки решение проблемы? Если вы его, конечно, знаете) Я повторю вопрос: $user_avalable_stocks - нормально разбирается в twig, а как $user_avalable_stocks разобрать в контроллере?
Кстати, что-то никто из многоуважаемых пользователей, столько много читавших про ООП, не сказал, что мой способ - просто костыль. Рабочий, может даже очень неплохой, но все-таки костыль. И никому из присутствующих знатоков, к сожалению, не пришла в голову такая идея: а как же twig разбирает $user_avalable_stocks? Ведь в twig-то я отправляю только protected свойства! Пока что я увидел только "Пойти почитай", "Не понимаешь, что делаешь", но не увидел никого, кто бы сам что-то понимал в этой задаче. Очень прескорбно, господа, что по нашей доброй русской традиции, вы вместо того, что подсказать что-то новичку, отправляете его курить мануалы. Я сам знаю, что их надо покурить. И не за тем пишу на форумы. А вам если влом что-то подсказать новичку, так вы проходите мимо! Форум для того и нужен, чтобы получить ответ на вопрос, а не для чтобы великие "Гуру" повышали свою самозначимость за счет уменьшения значимости другого, мол, вот я какой, все знаю, все понимаю, но тебе ни-че-го не скажу, а ты лучше знай свое место - сперва нужно до дыр зачитать мануалы, а уж потом тревожить великих и могучих. Стыдно, господа, стыдно должно быть)
Кстати, что-то никто из многоуважаемых пользователей, столько много читавших про ООП, не сказал, что мой способ - просто костыль. Рабочий, может даже очень неплохой, но все-таки костыль.
Неправда. Я написал вам про костыль в ответ на ваше "решение".
А на ваши вопросы "как твиг это делает" отвечает документация по Twig, которая по полочкам раскладывает это:
For convenience's sake foo.bar does the following things on the PHP layer:
check if foo is an array and bar a valid element;
if not, and if foo is an object, check that bar is a valid property;
if not, and if foo is an object, check that bar is a valid method (even if bar is the constructor - use __construct() instead);
if not, and if foo is an object, check that getBar is a valid method;
if not, and if foo is an object, check that isBar is a valid method;
if not, return a null value.
Это по вопросу доступа к свойствам. А по поводу for - опять же документация или исходники. Обычный foreach. Просто вы написали код неправильно и он именно поэтому не работает. Здесь вы его не привели. Поэтому вам и пишут логичный вывод: "косяк ваш, а то, что как вы решили проблему - костыли". По-другому на ваш вопрос не ответить - вы не даёте входных данных. А в итоге ещё и наезжаете на тех, кто вас разумно критикует.
Успехов, однако.