Tomalak ответ правильный для ColdFusion 8; однако с ColdFusion 9 ситуация немного меняется, выход которой ожидается в конце этого года. (Для полноты картины я скопирую ответ Томалака и откорректирую его соответствующим образом, поэтому спасибо за быстрый старт.))
Должен ли я использовать имя init в качестве имени конструктора?
CF8: Нет, вы можете назвать функцию инициализации как угодно - «init» - это просто соглашение. И это не настоящий конструктор, так как он не вызывается автоматически.
CF9: Ответ по-прежнему "нет", вам не нужно . Но, возможно, вам следует: Это относится к созданию объектов в cfscript (или компонентах только для сценариев, которые также входят в CF9). Добавляются ключевые слова import
и new
, и вы сможете создать экземпляр объекта следующим образом:
import model.security.*;
userObj = new User();
Предполагается, что у вас есть User.cfc
в папке model/security/
. Кроме того, CF9 будет искать наличие метода с именем «init» или метода с тем же именем, что и у объекта (в данном случае «User»), и неявно вызывать его как конструктор.
Я не уверен, будет ли передача аргументов директиве new
перенаправлять их в конструктор, как вы видели бы в Java / C. Я предполагаю, что так и будет, но я еще не видел ни презентаций, ни примеров кода, которые бы указывали так или иначе; и сам не проверял, потому что это пришло мне в голову, когда я писал это. ;) (Другая идея: мне интересно, будут ли поддерживаться несколько конструкторов с разными наборами аргументов. Я сомневаюсь в этом, но это хорошая идея.)
Я предполагаю, что есть некоторый смысл, что подобная функциональность может проявляться в CFML (язык на основе тегов, отдельный от cfscript), но на данный момент об этом ничего не сказано.
Если я создаю экземпляр компонента без вызова метода init, что возвращается?
Экземпляр компонента возвращается, как и следовало ожидать. Наличие или отсутствие функции init () совершенно не имеет значения. В компонентах ColdFusion нет понятия статических функций, вы всегда получаете полностью сконструированный экземпляр из GetObject («component», ...). (Это не так для объектов Java, которые создаются непосредственно перед первым использованием, если вы забыли / не делали этого вручную.)
Могу ли я взять код в методе init и удалить метод init, а затем вставить код в заголовок компонента, это будет иметь тот же эффект, что и конструктор init?
Да, если , если метод init () не принимает никаких параметров, разницы нет.
Однако принято иметь метод init (), который возвращает экземпляр компонента («this»). Даже если он ничего не делает, кроме "return this;
". Я остался бы последовательным и добавил бы один к каждому компоненту, даже если это не было строго необходимо.