За последние 24 часа нас посетили 38504 программиста и 1284 робота. Сейчас ищут 1055 программистов ...

Наследование

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

  1. crautcher

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

    С нами с:
    21 май 2011
    Сообщения:
    156
    Симпатии:
    0
    вот есть класс , у него есть переменная публичная $а предполжим , я ее задаю в конструкторе , затем делаю класс екстендс 1ый класс, я могу обращатся к этой $а ?
     
  2. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    public можно обращается и вне контекста класса ($this).
    protected можно только внутри класса и наследников.
    private только внутри класса.

    Так что ответ: да, можно.

    upd эээ, или имеются в виду не $this->a, а именно $a? Нет, напрямую нельзя. Конструктор это функция, а там зона видимости переменных локальна (только внутри).

    Можно сделать global $a, но это плохая практика.

    Лучше передать переменной класса (свойству) $a по ссылке:
    Код (Text):
    1. $this->a = $a;
    И потом получать её через $this->a в классе и наследниках.
     
  3. crautcher

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

    С нами с:
    21 май 2011
    Сообщения:
    156
    Симпатии:
    0
    не не не - $this->a , а может имеет смысл ,незнаю зачем ,но многии делают так ,метод получения сделать в 1ом класе- чтото вроде:
    PHP:
    1. <?
    2. function GetA()
    3. {
    4. return $this->a;
    5. }
     
  4. alexfer

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

    С нами с:
    2 авг 2010
    Сообщения:
    239
    Симпатии:
    0
    Можешь обращаться в дочернем классе, если public или protected
     
  5. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Это называется геттер. В PHP а) делается по привычки из других языков и б) иногда так правильнее для архитектуры приложения.

    В других языках иногда нельзя вызвать свойство напрямую, поэтому их "оборачивают" в методы getProperty или setProperty (это сеттер), где property название свойства.

    Тут ты сам реши как делать. Потому что по большому счёту это "религиозный" вопрос. :)
     
  6. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    геттеры и сеттеры лучше реализовывать через магию, см. __get() и __set()
     
  7. alive342

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

    С нами с:
    21 апр 2011
    Сообщения:
    137
    Симпатии:
    0
    Адрес:
    Российская Федерация
    В других, нормальных языках, просто есть понятие свойство, а есть понятие данные. И это, обычно, очень удобно.[/php]
     
  8. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    пример в студию
     
  9. alive342

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

    С нами с:
    21 апр 2011
    Сообщения:
    137
    Симпатии:
    0
    Адрес:
    Российская Федерация
    питон?
    PHP:
    1.  
    2. class book(object) :
    3. # ...
    4.    @property
    5.     def title(self) :
    6.         return self.__title
    7.    
    8.     @title.setter
    9.     def title(self, title) :
    10.         self.__title = unicode(title)
    11.    
    12.     @title.deleter
    13.     def title(self) :
    14.         del self.__title
    15. # ...
    16.  
    17. myBook = book()
    18. myBook.title = u"Трулала"
    19.  
    20.  
     
  10. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Так $this->a это и есть свойство
     
  11. alive342

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

    С нами с:
    21 апр 2011
    Сообщения:
    137
    Симпатии:
    0
    Адрес:
    Российская Федерация
    и тогда какие же свойства ты можешь задать этому свойству?)
     
  12. Михаил

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

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    @alive342

    а, что вот это делает:
    Код (Text):
    1. @property
    , ну то есть что за конструкция? и в чём отличие от @title.setter, @title.deleter
    как-то в руби @var - внутренняя переменная объекта, @@var - класса.
     
  13. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. $this->a = 'val';
     
  14. alive342

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

    С нами с:
    21 апр 2011
    Сообщения:
    137
    Симпатии:
    0
    Адрес:
    Российская Федерация
    о да, ты присвоил 'свойству' значение )
    свойство должно иметь некоторую логику, а не просто хранить-ссылаться на значение )
    конечно можно эмулировать __методами, но это костыль )
     
  15. Михаил

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

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    alive342
    я по-мойму понял что ты имеешь в виду, в питоне
    Код (Text):
    1. var = 1
    эмулируется как:
    Код (Text):
    1.  
    2. var.=(1)
    правильно?
    то есть "=" не присваивание а название метода же правильно
    в php другая ооп модель тут так нельзя тут да нужны __методы
     
  16. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
  17. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Да не вопрос:
    Код (Text):
    1. $this->a->b = 'c';