Зачем использовать метод Код (Text): Yii::$app->getSecurity() , который возвращает компонент сесурити, если я могу напрямую вызвать Код (Text): Yii::$app->security и эффект будет тот же?
а если без подколов то по принципу ООП свойство security должно быть скрыто (protected) и получить его можно только через getSecurity, но РНР в этом месте не очень дружит с ООП и по этому как правило такие свойства открыты (public).
По принципу ООП так-то оно так, но $security - это Public Properties, согласно документации. С такой логикой, если бы $security был бы приватным или защищенным свойством - у меня бы и вопросов не возникало, потому что тогда бы код Код (Text): Yii::$app->security элементарно вывалился в Fatal Error. То есть две реализации совершенно одинакового способа, как наподобии echo и print. Вот и вопрос - зачем?
Все открыты. Если не принято скрывать свойства - тогда зачем вообще разработчики ввели этот геттер? Явно же не для красоты и разнообразия?
известно почему, потому что скрывать не принято, а вот геты и сеты они пишут как говорится по памяти, из других языков, там где это принято исходя из принципов ООП. Такой казус. что ты обращаешься к свойству на прямую, что через getSecurity разницы ни какой.
Увы, но для красоты и разнообразия. Про "не принято", это забудьте. Как будто этого разговора не было.
Тут на самом деле не сколько "красота", сколько не навязывание своего стиля. Т.е. программист может сам выбрать, как ему удобнее писать. Добавлено спустя 1 минуту 48 секунд: К инкапсуляции это отношения не имеет. На самом деле публичные свойства в PHP тоже не сильно нарушают инкапсуляцию, ибо останется механизм перехвата обращения к ним через магию в случае необходимости. Не самый красивый способ, но в некоторых случаях он предпочтительнее, чем рождение пустых геттеров/сеттеров.
Если для свойства существует метод-геттер или метод-сеттер, то его можно вызывать через конструкцию $object->getField($args), передавая аргументы, что недостижимо для обращения через $object->field.
Да, просто никто из отвечающих не знает Yii2. Когда вы пишите Yii::$app->security, магический метод __get(), определённый в базовом классе yii\base\Object, который на вершине иерархии классов Yii, вызывает getSecurity() скрыто. Поэтому здесь это одно и то же. Читайте доки и исходные коды: https://github.com/yiisoft/yii2/blob/master/framework/base/Object.php
На самом деле нет, вы тоже не очень знаете Yii::$app->security вызывает ->get('security') и Yii::$app->getSecurity() вызывает ->get('security');
Да, действительно. Это происходит тут: https://github.com/yiisoft/yii2/blob/master/framework/di/ServiceLocator.php. Спасибо за поправку