| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Для профи > final и динамические аттрибуты |
| Автор: Kallisto 31.8.2009, 18:31 |
| Интересует такой вопрос. РНР имеет кейворд final, который запрещает наследовать класс или переопределять метод. В тоже время РНР поддерживает динамические атрибуты. Возникает вопрос почему класс, который объявлен как final так же можно делать дин. атрибуты? |
| Автор: NewDima 31.8.2009, 19:45 |
| Ммм, под динамическими атрибутами вы понимаете свойства класса, для установки которых вызываются магические методы __set(get)? Так как по вашему связана установка динамических свойств (которая происходит в рантайме) с невозможностью наследоваться от класса? |
| Автор: Kallisto 1.9.2009, 00:10 |
| Ну используя final мы передаем программисту класс который имеет фиксированный набор методов которые нельзя поменять.. то есть поведение класса четко определенно. А тут получается используя дин. атрибуты экземпляр класса может иметь разные свойства...мне кажется это немного не верно.. Если final то final... может я ошибаюсь? |
| Автор: IZ@TOP 1.9.2009, 01:17 |
| Kallisto, Вы действительно ошибаетесь. Свойство final говорит о том, что мы не можем наследовать класс или переопределять методы. Т.е. подразумевается, что класс или метод является конечной точкой в реализации задуманной разработчиком системы. И наоборот - "динамическое" создание переменных ни коим образом не противоречит данной концепции: это исключительно свойство языка. Вы все равно не сможете вмешаться в конечную логику приложения, вы лишь будете необдуманно использовать возможности среды. |
| Автор: Kallisto 1.9.2009, 11:00 |
| Да это понятно что вмешаться не получится никоим образом.. но получается что final класс который по логике является последним и окончательным может иметь случайное количество атрибутов. |
| Автор: IZ@TOP 1.9.2009, 13:12 |
| Kallisto, это не случайное количество атрибутов, это специфика языка, которая позволяет такое делать. Определи метод __set и возвращай из него эксепшн в случае попытки записать несуществующие поля. |