Методы-конструкторы |
Начинающим осваивать объектно-ориентированное программирование (ООП) очень важно уяснить особую роль метода-конструктора. Конструктор — это метод, который выполняется автоматически при создании объекта класса с помощью оператора new. Например, в строке кода $registry = new JRegistry(); создается новый объект класса JRegistry и выполняется метод-конструктор этого класса перед присваиванием его объекта переменной $registry. В языке РНР конструктор называется construct. Он служит для инициализации значений объекта и принимает аргументы, но не возвращает никаких значений. Из одного конструктора можно вызвать другой конструктор родительского класса, используя следующий синтаксис: parent:: construct(); Если в классе отсутствует метод-конструктор, то вызывается конструктор родительского класса, как это обычно происходите методами, но при условии, что конструктор определен в родительском классе. В более поздних версиях языка РНР конструкторы стали называться по имени своих классов, например, конструктор jregistry () класса JRegistry вместо construct (). Если же метод construct () отсутствует в коде РНР, то вместо него будет произведен поиск метода-конструктора по имени класса. А в Joomla все конструкторы называются Ниже приведены первые строки кода из конструктора класса JController Admin. function construct ($config = arrayO) { parent:: construct($config); В этом фрагменте кода вызывается конструктор родительского класса JController. В этом конструкторе применяется способ так называемой рефлексии для построения массива с именами всех открытых в данном классе методов, как следует из приведенного ниже кода. // определить методы, исключаемые из базового класса $xMethods = get_class_methods('JController'); В приведенном выше фрагменте кода поле taskMap заполняется ассоциативным массивом, где ключи и значения содержат имена открытых методов в данном классе, за исключением методов из его родительского класса JController. Кроме того, всегда добавляется вызываемый по умолчанию метод отображения, поскольку он присутствует в классе JController. Если вы незнакомы с понятиями открытых, закрытых и защищенных методов и полей, обратитесь за справкой к приведенной далее врезке "Модификаторы доступа public, protected и private". Через несколько строк кода в этом же методе следует приведенный ниже фрагмент кода. // если исходная задача определена, зарегистрировать ее как таковую if (array_key_exists('default_task', $config)) { $this->registerDefaultTask($config['default_task']); } else { $this->registerDefaultTask('display'); } В этом фрагменте кода вводится исходная (по умолчанию) задача с ключом default и значением "display". Этим Joomla уведомляется, что нужно делать с запросом, если конкретная задача не указана. Для основных компонентов это, как правило, задача отображения. Рассмотрим, как этот механизм действует на данном конкретном примере. При вызове метода В родительском классе JControllerAdmin определены следующие методы: checkin(), delete (), display (), publish (), reorder (), а также saveorder(). Из них только метод display () определен также в классе JController, и поэтому он явным образом вводится в массив, а все остальные методы — обычным образом. Кроме того, конструктор класса JController добавляет в массив элемент с ключом default, имеющим по умолчанию значение "display". По завершении выполнения конструктора из родительского класса JController в массиве taskMap содержатся значения. Ниже приведена следующая часть кода из конструктора родительского класса JControllerAdmin. // определить сопоставления со стандартными задачами $this->registerTask('unpublish', 'publish'); // значение = 0 $this->registerTask('archive', 'publish'); // значение = 2 $this->registerTask('trash', 'publish'); // значение = - 2 $this->registerTask('report', 'publish'); // значение = - 3 $this->registerTask('orderup', 'reorder'); $this->registerTask('orderdown', 'reorder'); Именно здесь дополнительные задачи сопоставляются с соответствующими методами. Например, в выделенной выше строке кода задача trash сопоставляется с методом publish () добавлением в массив taskMap элемента с ключом trash и значением "publish". После выполнения этого фрагмента кода в массиве taskMap появятся значения. Этот способ сочетает в себе простоту и гибкость. Если правильно назвать задачи по именам соответствующих методов контроллера, то для их сопоставления не придется больше ничего делать, поскольку все остальное возьмет на себя Joomla. А если потребуется видоизменить сопоставление, для этого достаточно воспользоваться методом registerTask (), как показано выше. В данном примере имеет смысл воспользоваться тем же самым методом для выполнения задач публикации (publish), снятия публикации (unpublish), архивирования
Понравился материал? Пригодилась информация? Плюсани в социалки!
Теги:
|
Похожие новости | |
|
|