Я пытаюсь использовать синтезированные аксессоры для компонента на Lucee (хотя эта проблема, похоже, одинакова и для ColdFusion).
Код репрограммы:
// Person.cfc
component accessors=true {
property firstName;
property lastName;
function init(firstName, lastName){
variables.firstName = arguments.firstName;
variables.lastName = arguments.lastName;
}
}
И вызывающий код:
// person.cfm
person = new Person("Abigail", "Bowen");
writeDump(person);
Обратите внимание, что здесь я не использую синтезированные аксессоры, я просто устанавливаю значения аргументов в переменные с переменными с одинаковым именем.
Однако, когда я запускаю этот код, я вижу следующее:
Обратите внимание, как свойства были заполнены. Там нет проблем с этим, но я явно не понимаю, как должен работать флаг accessors
. Я думал, что это просто предназначено для синтеза некоторых методов доступа для меня (что у него есть), но все.
Также обратите внимание, что если я изменяю определение CFC, чтобы не устанавливать accessors в true, тогда дамп показывает это:
Так что никаких синтезированных аксессуаров (как и ожидалось), но и теперь свойства даже не отображаются (со значениями переменных или нет).
Я действительно не понимаю это сочетание свойств и настроек аксессоров? Разумеется, настройка аксессоров должна влиять только на то, создаются ли эти методы доступа?
Если бы я видел это только на одной из платформ, я бы, вероятно, отказался от того, как writeDump()
интерпретирует определения свойств. Но поведение ColdFusion 11 одинаково, поэтому на самом деле кажется, что есть какая-то разница в поведении, которое я не совсем понимаю.
Кто-нибудь может это объяснить? Есть ли какие-либо документы, которые объясняют это? Если нет... гм... почему бы и нет?
Моя основная проблема заключается в том, что значения свойств не сохраняются "правильно" и могут вызвать у меня проблемы, когда я реализую больше кода.
UPDATE:
По крайней мере, в ColdFusion, это просто изменение в поведении writeDump()
, потому что если есть атрибуты для свойств (независимо от того, установлен ли флаг accessors
), значения свойств начинают отображаться в дампе. Однако это не так на Lucee, поэтому там есть вопросительный знак.
Ради полного раскрытия, этот вопрос представляет собой резюме вопроса, который я также задал в своем блоге ( " CFML: попытка понять аксессоры" ). Дублирование преднамеренно, так как мой блог получает другую аудиторию от той, что принадлежит этому сайту.