Anonymous
Надо ещё оттестировать, на чистом шаблоне.
Dmitriy
по идеи всегда должен вызывать getVariable через магию
Павел
Я считал что при protected всегда магия
Павел
А оно вишь чо
Anonymous
Я считал что при protected всегда магия
private/protected да, магия должна быть.
Anonymous
Я не уверен что всё ок в проекте, затестирую дома если силы останутся
Павел
Ну тут тока на private получается
Павел
__get() в BaseObject вообще не вернёт свойство если нет геттера
Павел
И там нет привязки к YII_DEBUG
Anonymous
Да я знаю, что там нет привязки.
Anonymous
Я шарю как кишки работают
Anonymous
Поэтому и удивился, ЧЗХ
Павел
Нужно повторение эксперимента
Павел
Шерме!
Anonymous
у меня нет такого поведения . пофиг на YII_DEBUG
видимо в проекте чё-то куда-то намутили
Dmitriy
только приват свойство вызывается через getTest(), паблик и протектед на прямую
Павел
Кагэто?
Dmitriy
class CustomView extends View { private $test = 1; public function getTest() { return $this->test; } } вот код. брекпоинт стоит на getTest. в коде вызываю $this->test брекпоинт срабатывает только если $test приватный
Павел
Фигня какая то
Павел
А если просто класс и __get()
Павел
Сработает на protected?
Anonymous
только приват свойство вызывается через getTest(), паблик и протектед на прямую
Ага, т.е. протектед напрямую идет... Хм... В принципе с одной стороны логично, ведь рендер происходит во View, а ViewCustom унаследована, всё логично.
Anonymous
Просто видимо путаницу сам механизм рендера вводит, там перехват потока вывода идет и класс через DI создается.
Павел
Магия! Поэтому я всегда подчеркивание добавляю к имени свойства
Dmitriy
Сработает на protected?
нет. на прямую. __get не захватывает
Anonymous
Не совсем странно)
Павел
Всегда думал что работает на proteted
Anonymous
Работает, если ты для модели например сделаешь
Павел
То что вызов рендер внутри класса это вносит дополнительную путаницу
Anonymous
Тут фишка в том, что CustomView и View родственники
Павел
Но внутри класса и private свойства должны быть доступны без геттера
Anonymous
Следовательно могут обратиться к protected
Anonymous
хотя...
Dmitriy
Не совсем странно)
странно, из View мы вызываем протектед метод . хотя видимость не позволит без магии
Anonymous
\yii\base\Component Метод canGetProperty Идет вызов property_exists($this, $name), следовательно если protected объявлен, то будет возвращен.
Павел
Это тут при чем? __get() наследуется от BaseObject
Anonymous
А кто тебе мешает получить protected свойство
Anonymous
хотя тогда бы и приватные должны были бы быть доступны
Anonymous
Без пол литра не обойтись...
Anonymous
С чего это?
var_dump($this); exit();
Павел
Вьюха просто инклудится в renderphpfile()
Павел
var_dump($this); exit();
Я не за компом ща
Павел
Странно...
Anonymous
Я тебе гарантирую что там CustomView будет
Anonymous
Просто вардоком активно пользуюсь
Павел
Ну так в файле вьюхи $this это экземпляр CustomObject
Павел
Так CustomView или CustomObject?
Anonymous
CustomView имел в виду
Anonymous
Я уже часов 30-35 не сплю
Павел
Так я с этим согласен 😆
Павел
Оч странно, оч.
Павел
Надо на php 5.6 проверить
Павел
Мож в семёрке магия только на private работает
Павел
А мы, лохи, этого не знаем
Anonymous
Кстати да, и там и там РНР7
Dmitriy
я не понимаю как во вью передается класс View, я не нашел такой фитчи. Там просто вызывается renderphp внутри View . раз в View пхп файл по идеи должны приватные свойства на прямую браться, а это не так =(
Anonymous
Вот я о том же
Anonymous
Либо должны и приватные быть доступны
Anonymous
Либо не доступны протектед
Dmitriy
можно разработчиков позвать и задать вопрос
Павел
тогда уж разработчиков PHP
Павел
Тема такая
Павел
Внутри класса вызов и private и protected происходит напрямую
Павел
Из класса потомка вызов protected - напрямую, а private через __get()
Vladislav
Народ, как подключить js в контроллере?
Leta
зачем в контроллере?
Павел
Кароче через AssetManager
KoJIT
у меня приватное свойство вызвалось напрямую
Vladislav
АссетМэненжер подключает во всех экшенах
Vladislav
мне только в одном нужно
Dmitriy
Из класса потомка вызов protected - напрямую, а private через __get()
выше был вопрос был про другое. как передается view? если extend то приваты должны доступны без __get
Leta
мне только в одном нужно
$this->registerJs($script, yii\web\View::POS_END);