include("compteur.php"); ?>
Урок 13. Принципы ООП и классы.Масса явлений, оставшихся без сознания, Сегодня мы с вами познакомимся с принципами объектно-ориентированного программирования и их реализацией в PHP. Многие недолюбливают эту тему и изучают ее поверхностно. Но все же без понимания ООП будет трудно создать что-то существенное, тем более практически все современные языки программирования являются обектно-ориентированными. Тем самым, поняв эту тему однажды, не придется к ней возвращаться, если вы захотите изучить другой язык. Принципы ООП.Давайте вдумаемся в эти слова "объектно-ориентированный". Они подразумевают, что какая-то деятельность направлена на определенный объект. Объектами в нашей повседневной жизни выступают все окружающие нас предметы: автомобили, книги, стол, CD, домашние тапочки в конце концов. Рассмотрим такой объект, как телевизор. Внутри этого объекта находятся множество других объектов: микросхемы, провода, электронно-лучевая трубка и так далее. Но при взаимодействии с телевизором мы об этом даже и не задумываемся. В этом заключается первый принцип ООП - инкапсуляция. Мы также знаем, что, нажав на определенную кнопку, мы включим телевизор, а удерживая другую - увеличим или уменьшим громкость. При этом от объекта мы получаем только результат его работы, не задумываясь о его внутренних процессах. Это составляет второй принцип - абстракцию. Наконец, третий принцип, составляющий парадигму ООП, называется наследованием. Он заключается в том, что, например, цветной телевизор произошел от черно-белого, а телевизор с плазменным экраном - от обыкновенного. При этом каждый потомок наследовал свойства и функции предшественника, дополняя их своими, качественно новыми. Наследование позволяет расширить возможности объекта, не создавая при этом новый объект с нуля. Классы в PHP.Класс служит шаблоном для объекта. Он создается следующим образом:
Класс может содержать внутри себя собственные определяющие этот класс переменные, называемые свойствами класса. Кроме того, класс, как правило, содержит функции, которые называются методами класса. Для разграничения методов и свойств следует запомнить, что методы ассоциируются с глаголами в нашем обыденном языке, а свойства - с прилагательными или существительными. Тем самым метод всегда подразумевает действие, а свойство - признак объекта. К примеру, возьмем такой объект, как шариковая ручка. Его свойствами могут являться слова "пластмассовая", "синяя", "новая" и так далее. А методом будет лишь то, что она пишет (конечно, если вы не найдете другой способ ее применения). Доступ к свойствам и методам класса достигается с помощью указания пути к нему, где первым его элементом является название класса, а вторым - название самого свойства или метода. Элементы пути разделяются знаком ->. Давайте рассмотрим, как это делается:
Вот мы написали небольшой класс работы с массивами. Он имеет одно свойство - $array. Обратите внимание, как мы прописываем к нему путь: как уже говорилось, первым элементом пути должно быть название класса, но ввиду того, что это свойство и так находится в самом классе, то название меняется на слово this. Далее мы определяем два метода класса, представляющие собой функции getUniqSum() и getSortedMerge(). Обратите внимание, что свойства классов всегда являются глобальным в пределах этого класса, то есть нам не требовалось в каждой функции писать global $this->array. Также заметьте, где ставится знак $: его место в самом начале описания пути. Причем он ставится даже перед указанием пути к методу класса (то есть фактически к функции). Теперь создадим новый класс, который будет наследовать все возможности родительского класса.
Обратите внимание на функцию с названием самого класса. Это так называемый конструктор класса, который автоматически вызовется при создании экземпляра класса. Теперь рассмотрим ход работы с полученными классами.
Сначала мы создаем новый экземпляр класса Array_class и определяем его свойство array, затем выводим сумму элементов без учета повторяющихся (в нашем примере выведется 9). Далее мы создаем экземпляр класса Advanced_array, который наследует все свойства и методы Array_class. Обратите внимание, что при создании класса не требуется указывать никаких параметров, но так как у Advanced_array есть конструктор, требующий параметры, то в скобках мы указываем эти данные. Таким образом не пришлось определять свойство класса Advanced_array, так как за нас это сделал конструктор. Затем мы применяем метод getSizeofMerge(), который сам по себе использует метод родителя getSortedMerge(), и выводим полученные данные. Использование классов.По правде говоря, PHP не является в полной мере объектно-ориентированным языком, поэтому очень часто можно обойтись и без использования классов, но иногда они сильно облегчают жизнь. Но не стоит и злоупотреблять ими, так как неоправданно большое количество используемых классов не только затрудняет понимание кода программы, но нередко приводит к снижению ее производительности. А на сегодня все. До встречи. |