предположим есть некий подкласс: Код (Text): abstract class Test2 extends Test{ protected $var = "test"; function getTest () { return ..... } } Вот как обратиться к переменной $var чтоб ее вернуть ? $this->var; не помогает пишет Notice: Undefined property: Test::$var in ......
Вот та самая команда SELF что никак не мог вспомнить спасибо. НО .. при ее использовании выдается ошибка Access to undeclared static property: Test2::$var Если я переменную $var делаю как static $var; то никаких проблем нет. А разве нельзя к ней получить доступ не делая ее статичной ? Я просто в ООП пока тока разбираюсь вот и путается в голове пачка информации пытаясь обрести свои полки
А все, еще раз покурил главу на тему статичных методов и свойств и понял почему она должна быть статичной. Так как в контексте объекта эта переменная не определена и доступ к ней должен быть в контексте класса что и есть статичное свойство.
Нет все верно. Я из Test2(дочка) Test(родитель) Пытаюсь обратиться к переменой описанной в Test2 но оператор $this обращается к объекту а не к классу и как следствие к родительскому классу лезет автоматом в котором нет описания переменной $var
Ведь объект в данном примере является экземпляром основного класса Test и как следствие в нем не определены свойства подклассов. А вот если бы объект был экземпляром класса Test2 тогда бы ему были как я понимаю доступны по $this свои свойства а по методу parent:: свойства родителя. Или свойства родителя были ы так же доступны по $this ? Я прав или что то путаю ?
NR55RU наследование идёт сверху-вниз, т.е. переменные, объявленные в дочернем классе, не могут быть доступны в экземпляре объекта родительского класса, т.к. родительский класс "не знает" своих дочерних классов. дети знают родителей, родители не знают детей.
и свойства родителя тоже, объявленные как публик или протектед а также методы, объявленные как статические. оператор :: используется для доступа к статическим свойствам и методам. статические методы и свойства являются общими для всего класса