<<...предыдущий материал на эту тему
ООП (Объектно-ориентированное программирование) — это подход к разработке относительно больших проектов с долгим временем жизни. Язык PHP становится все более популярным и используется во многих профессиональных проектах. Ввиду этого, техника ООП все чаще используется в PHP-проектах. В этой статье обсудим технику ООП, которая пригодна для использования при программировании на PHP.
Когда начинается проект, далеко не всегда сразу ясно, будет он большим и долгим или же маленьким и редко модифицируемым. В таких случаях можно рекомендовать разрабатывает проект используя ООП, так как это дает в итоге более прозрачный код, который легче модифицировать.
Нет особого смысла использовать ООП для мелких проектов, которые будут существовать короткий промежуток времени. Однако если вы планируете в будущем добавить новые функции и т.п., то ООП сэкономит ваше время.
Еще одно важное замечание касательно ООП (которое можно отнести ко многим аспектам программирования) — никто не может правильно использовать ООП, пока не приобретет достаточно опыта. Университетских курсов и самообразования недостаточно. Люди, изучающие ООП, получают хорошие оценки, имеют диплом, но часто используют процедурный подход к программированию. Единственный путь к правильному использованию ООП — это опыт и обучение на собственных попытках и ошибках. Иногда новички думают, что если они используют классы, значит используют ООП. Это совершенно неверно. Вы можете использовать классы, но продолжать программировать в процедурном стиле.
Ниже приводится список концепций ООП и обсуждается из реализация в PHP.
- Множественного наследования в PHP нет и крайне маловероятно, что оно вообще появится. Многие ООП-языки прекрасно обходятся без него (Java, ObjectPascal, C#)
- Перегрузка методов работает нормально. Вы можете переписывать метод класса-родителя в классе-наследнике.
Пример:
class A { function foo() { echo "A::foo();"; } }
class B extends A { function foo() { echo "B::foo();"; } }
$obj = new B();
$obj->foo();
возвращает B::foo();
- Вызов базовых функций работает точно так же, как в C++
Пример:
class A { function foo() { echo "test A"; } }
class B extends A { function foo() { A::foo(); echo " from class B"; } }
$obj = new B();
$obj->foo();
Возвращает test A from class B.
- Виртуальные функции. По определению все методы класса являются виртуальными. Каждый объект "знает" свой класс и все его функции.
Пример:
class A
{
function foo() { echo "1"; }
function boo() { $this->foo(); }
}
class B extends A
{
function foo() { echo "2"; }
}
$b = new B();
$b->boo();
Возвращает 2, это демонстрирует, что функция foo() виртуальная.
- Полиморфизм. Так как все методы виртуальные и переменные не объявляются, полиморфизм присутствует по определению.
- Статические функции. Если метод класса не ссылается ни на одно свойство (переменную) класса, его можно назвать статическим.
Например:
class A { function foo() { return "test"; } }
echo A::foo();
Возвращает test.
- Статических переменные класса нет. Вообще это спорный вопрос, нужны ли в PHP статические переменные. Некоторые принципы ООП говорят о том, что статические переменные не нужны. Однако есть исключения, когда они полезны, например, $HTTP_POST_DATA и тому подобные. Есть возможность сделать глобальную статическую переменную за пределами класса и получить к ней доступ через $GLOBALS или объявить ее глобальной явно при доступе.
- Нет шаблонов (параметризованных классов), но они и не нужны, потому что переменные не объявляются и нет строгих типов. Например, вы можете хранить объекты, которые принадлежать к разным классам (так же как и числа и строки) в одном массиве.
- Нет private/protected переменных и функций. Вообще-то не было бы ничего плохого в том, если бы они были, но они очень редко нужны в языках типа PHP.
Многие новые фишки ООП, такие как перехват исключений, пространство имен и т.п. собираются внедрить в Zend Engine версии 2.0. Подробнее об этом вы можете узнать на http://www.zend.com/zend/future.php
<<...предыдущий материал на эту тему