Начинающие программисты на PHP чаще всего застревают на том, что не совсем понимают что же это за зверь такой (объектно-ориентированное программирование - OOP (Object Oriented Programming)) и для чего он нужен. В данной статье попытаюсь объяснить примерно что это такое. Не претендую на полное описание и единственно верное, просто изложу своё понятие об этом.
Для начала познакомимся с некоторыми терминами :
Класс - это набор переменных и функций, взаимодействующих между собой.
Свойства - это используемые в классе переменные.
Методы - это используемые в классе функции.
Конструктор - это функция, которая выполняется автоматически при создании объекта.
Синтаксис написания класса похож на синтаксис написания функции, только вместо ключевого слова
function мы используем ключевое слово
class:
<?php
class klass{
// здесь
описиваем свойства объекта
var $svoistvo1;
var $svoistvo2;
// здесь
описываем методы
function metod($peremennaja)
{
// код
}
}
<font color="#0000cc">?>
Свойства описываются с использованием ключевого слова
var. Возьмем пример из реальной жизни, который и попытаемся реализовать в виде класса. Автомобиль. Это и будет наш объект. Как известно все автомобили имеют общие свойства : цвет, форму, размер, мощность и так далее. Это и будут свойства нашего объекта. Также автомобили выполняют какие-то действия : заводятся, поворачивают, останавливаются, едут. Всё это и будет методами. Теперь попробуем написать это на PHP:
<?php
class avtomobil
{
// свойства
автомобиля
var $nazvanie;
var $cvet;
var $forma;
var $razmer;
var $moschnost;
// метод
function tronutsia()
{
// код
}
// метод
function ostanovitsia()
{
// код
}
// метод
function ehat($skorost)
{
// код
}
//
метод
function povernut($ugol)
{
// код
}
}
<font color="#0000cc">?>
Как видим, всё достаточно просто. Теперь попробуем использовать этот класс. Создадим несколько автомобилей :
<?php
// создаём
мой автомобиль
$mine
= new avtomobil;
$mine <font color="#006600">->
nazvanie =
"BMW";
$mine <font color="#006600">->
cvet =
"Чёрный";
$mine <font color="#006600">->
moschnost =
"200
ЛС";
// создаём
её автомобиль
$ejo =
new avtomobil;
$ejo <font color="#006600">->
nazvanie =
"Ferrari";
$ejo <font color="#006600">->
cvet =
"Красный";
$ejo <font color="#006600">->
moschnost =
"300 ЛС";
// двигаем
мой автомобиль с места
$mine <font color="black">->
tronutsia();
// увеличиваем
скорость до 150
kм/ч
$mine <font color="black">->
ehat(150);
// а вот
догоняет её автомобиль
$ejo <font color="black">->
ehat(180);
// о
нет, ГИБДД.........
$mine <font color="black">->
ostanovitsia();
<font color="#0000cc">?>
</code>
Новый объект создаётся при помощи оператора new. Переменной присваивается значение типа "object", обращая её таким образом в объект. Используя оператор -> мы можем обращаться ко всем методам и свойствам объекта. Присвоение значений свойствам объекта идентично присвоению значений переменным.
Используя ООП часто нужно менять значение свойств объекта внутри самого класса. Для этого используется зарезервированная переменная $this, означающая, что свойство принадлежит данному классу.
<?php
class avtomobil
{
var $nazvanie;
var $cvet;
// ............. другие
свойства ............
function perekrasit($cvet)
{
$this
<font color="black">-> cvet =
$cvet;
}
}
$auto =
new avtomobil;
$auto<font color="#006600">->cvet="Красный";
$auto<font color="#006600">->perekrasit("Чёрный");
<font color="#0000cc">?>
Используя $this можно использовать не только "местные" свойства объекта. Также можно выполнять методы.
Ну а теперь пример практического применения класа : создадим класс, который будет отрисовывать ХТМЛ таблицу по заданому количеству строк и столбцов.
<?php
class tablica
{
var $stroka;
var $stolbec;
// указать
количество строк и столбцов
function zadat($stroka, $stolbec)
{
$this<font color="#006600">->stroka=$stroka;
$this<font color="#006600">->stolbec=$stolbec;
}
// создать
таблицу
function sozdat_tablicu()
{
echo "
border=1>";
for ($x=1; $x<=$this<font color="#006600">->stroka;$x++)
{
echo "";
for ($y=1; $y<=$this<font color="#006600">->stolbec;$y++)
{
echo "$x, $y | ";
}
echo "
";
}
echo "
";
}
}
<font color="#0000cc">?>
У этого класса два метода : zadat(), который указывает строк и столбцов будет иметь таблица, и sozdat_tablicu(), который рисует таблицу по заданым размерам. Вот пример использования :
<?php
$obj=new tablica;
$obj<font color="#006600">->zadat(2,3);
$obj<font color="#006600">->sozdat_tablicu();
<font color="#0000cc">?>
В классе также можно описать функцию, которая будет выполняться автоматически при создании объекта. Такая функция называется конструктором и должна иметь такое же название как и сам класс.
Например : дополним класс методом который присвоит значения переменным по умолчанию.
<?php
class tablica
{
var $stroka;
var $stolbec;
// создаём
конструктор
function tablica()
{
$this<font color="#006600">->stroka=5;
$this<font color="#006600">->stolbec=3;
}
}
//другие
методы
<font color="#0000cc">?>
Теперь мы можем создать таблицу не задавая ей размеров:
<?php
$tabl=new tablica;
$tabl<font color="#006600">->sozdat_tablicu();
<font color="#0000cc">?>
Получим таблицу размером 5x3.
Ну и наконец обратим внимание на одну из самых важных особенностей ООП - наследование. Это очень просто : просто создадим производный от уже существующего класс, который дополняет родительский класс и наследует его свойства и методы.
Для создания производного класса используется ключевое слово "extends". Теперь создадим класс, производный от класса tablica :
<?php
class tablica
{
var $stroka;
var $stolbec;
var $ramka;
// указать
количество строк и столбцов
function zadat($stroka, $stolbec)
{
$this
<font color="black">-> stroka =
$stroka;
$this
<font color="black">-> stolbec
=
$stolbec;
}
//
создать таблицу
function sozdat_tablicu()
{
echo "<table border=$ramka<font color="#cc0000">>";
for ($x=1; $x<=$this<font color="#006600">->stroka;$x++)
{
echo "";
for ($y=1; $y<=$this<font color="#006600">->stolbec;$y++)
{
echo "$x, $y | ";
}
echo "
";
}
echo "