За последние 24 часа нас посетили 45189 программистов и 3276 роботов. Сейчас ищут 1566 программистов ...

Доступ к свойству подкласса из самого подкласса. как ?

Тема в разделе "PHP для новичков", создана пользователем NR55RU, 28 фев 2011.

  1. NR55RU

    NR55RU Активный пользователь

    С нами с:
    16 фев 2011
    Сообщения:
    88
    Симпатии:
    0
    предположим есть некий подкласс:

    Код (Text):
    1.  
    2. abstract class Test2 extends Test{
    3.   protected $var = "test";
    4.  
    5.  function getTest () {
    6.  return .....
    7.  }
    8. }
    Вот как обратиться к переменной $var чтоб ее вернуть ?
    $this->var; не помогает пишет Notice: Undefined property: Test::$var in ......
     
  2. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    self::$var;
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    parent::$test ?
     
  4. NR55RU

    NR55RU Активный пользователь

    С нами с:
    16 фев 2011
    Сообщения:
    88
    Симпатии:
    0
    Вот та самая команда SELF что никак не мог вспомнить спасибо.

    НО .. при ее использовании выдается ошибка
    Access to undeclared static property: Test2::$var

    Если я переменную $var делаю как static $var; то никаких проблем нет.

    А разве нельзя к ней получить доступ не делая ее статичной ?
    Я просто в ООП пока тока разбираюсь вот и путается в голове пачка информации пытаясь обрести свои полки :)
     
  5. NR55RU

    NR55RU Активный пользователь

    С нами с:
    16 фев 2011
    Сообщения:
    88
    Симпатии:
    0
    А все, еще раз покурил главу на тему статичных методов и свойств и понял почему она должна быть статичной.
    Так как в контексте объекта эта переменная не определена и доступ к ней должен быть в контексте класса что и есть статичное свойство.
     
  6. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    а почему Test::$var, если обращаешься из Test2 ? в вопросе кусочка кода не хватает?
     
  7. NR55RU

    NR55RU Активный пользователь

    С нами с:
    16 фев 2011
    Сообщения:
    88
    Симпатии:
    0
    Нет все верно.
    Я из Test2(дочка) Test(родитель)
    Пытаюсь обратиться к переменой описанной в Test2
    но оператор $this обращается к объекту а не к классу и как следствие к родительскому классу лезет автоматом в котором нет описания переменной $var
     
  8. NR55RU

    NR55RU Активный пользователь

    С нами с:
    16 фев 2011
    Сообщения:
    88
    Симпатии:
    0
    Ведь объект в данном примере является экземпляром основного класса Test и как следствие в нем не определены свойства подклассов.
    А вот если бы объект был экземпляром класса Test2 тогда бы ему были как я понимаю доступны по $this свои свойства а по методу parent:: свойства родителя.
    Или свойства родителя были ы так же доступны по $this ?
    Я прав или что то путаю ?
     
  9. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    NR55RU
    наследование идёт сверху-вниз, т.е. переменные, объявленные в дочернем классе,
    не могут быть доступны в экземпляре объекта родительского класса, т.к. родительский
    класс "не знает" своих дочерних классов.

    дети знают родителей, родители не знают детей.
     
  10. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    и свойства родителя тоже, объявленные как публик или протектед

    а также методы, объявленные как статические.
    оператор :: используется для доступа к статическим свойствам и методам.
    статические методы и свойства являются общими для всего класса
     
  11. NR55RU

    NR55RU Активный пользователь

    С нами с:
    16 фев 2011
    Сообщения:
    88
    Симпатии:
    0
    Gromo
    Спасибо.