Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > final и динамические аттрибуты


Автор: Kallisto 31.8.2009, 18:31
Интересует такой вопрос.

РНР имеет кейворд final, который запрещает наследовать класс или переопределять метод.
В тоже время РНР поддерживает динамические атрибуты.

Возникает вопрос почему класс, который объявлен как final так же можно делать дин. атрибуты? 

Автор: NewDima 31.8.2009, 19:45
Ммм, под динамическими атрибутами вы понимаете свойства класса, для установки которых вызываются магические методы __set(get)?
Так как по вашему связана установка динамических свойств (которая происходит в рантайме) с невозможностью наследоваться от класса?

Автор: solenko 31.8.2009, 23:07
Цитата(NewDima @  31.8.2009,  18:45 Найти цитируемый пост)
Ммм, под динамическими атрибутами вы понимаете свойства класса, для установки которых вызываются магические методы __set(get)?

думаю имелись в виду просто:
Код

$obj - new stdClass();
$obj->test = 'test';

Автор: 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 и возвращай из него эксепшн в случае попытки записать несуществующие поля.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)