вот есть класс , у него есть переменная публичная $а предполжим , я ее задаю в конструкторе , затем делаю класс екстендс 1ый класс, я могу обращатся к этой $а ?
public можно обращается и вне контекста класса ($this). protected можно только внутри класса и наследников. private только внутри класса. Так что ответ: да, можно. upd эээ, или имеются в виду не $this->a, а именно $a? Нет, напрямую нельзя. Конструктор это функция, а там зона видимости переменных локальна (только внутри). Можно сделать global $a, но это плохая практика. Лучше передать переменной класса (свойству) $a по ссылке: Код (Text): $this->a = $a; И потом получать её через $this->a в классе и наследниках.
не не не - $this->a , а может имеет смысл ,незнаю зачем ,но многии делают так ,метод получения сделать в 1ом класе- чтото вроде: PHP: <? function GetA() { return $this->a; }
Это называется геттер. В PHP а) делается по привычки из других языков и б) иногда так правильнее для архитектуры приложения. В других языках иногда нельзя вызвать свойство напрямую, поэтому их "оборачивают" в методы getProperty или setProperty (это сеттер), где property название свойства. Тут ты сам реши как делать. Потому что по большому счёту это "религиозный" вопрос.
В других, нормальных языках, просто есть понятие свойство, а есть понятие данные. И это, обычно, очень удобно.[/php]
питон? PHP: class book(object) : # ... @property def title(self) : return self.__title @title.setter def title(self, title) : self.__title = unicode(title) @title.deleter def title(self) : del self.__title # ... myBook = book() myBook.title = u"Трулала"
@alive342 а, что вот это делает: Код (Text): @property , ну то есть что за конструкция? и в чём отличие от @title.setter, @title.deleter как-то в руби @var - внутренняя переменная объекта, @@var - класса.
о да, ты присвоил 'свойству' значение ) свойство должно иметь некоторую логику, а не просто хранить-ссылаться на значение ) конечно можно эмулировать __методами, но это костыль )
alive342 я по-мойму понял что ты имеешь в виду, в питоне Код (Text): var = 1 эмулируется как: Код (Text): var.=(1) правильно? то есть "=" не присваивание а название метода же правильно в php другая ооп модель тут так нельзя тут да нужны __методы