Статья
Версия для печати
Обсудить на форуме
Объектно-ориентированое программирование на PHP



Начинающие программисты на PHP чаще всего застревают на том, что не совсем понимают что же это за зверь такой (объектно-ориентированное программирование - OOP (Object Oriented Programming)) и для чего он нужен. В данной статье попытаюсь объяснить примерно что это такое. Не претендую на полное описание и единственно верное, просто изложу своё понятие об этом.

Для начала познакомимся с некоторыми терминами :

Класс - это набор переменных и функций, взаимодействующих между собой.
Свойства - это используемые в классе переменные.
Методы - это используемые в классе функции.
Конструктор - это функция, которая выполняется автоматически при создании объекта.

Синтаксис написания класса похож на синтаксис написания функции, только вместо ключевого слова function мы используем ключевое слово class:
Код:
<?php
class klass
{
// здесь описываем свойства объекта
var $svoistvo1;
var $svoistvo2;

// здесь
описываем методы
function 
metod($peremennaja)
{
// код
}
}
?>


Свойства описываются с использованием ключевого слова 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)
{
// код
}
}

?>


Как видим, всё достаточно просто. Теперь попробуем использовать этот класс. Создадим несколько автомобилей :

Код:
<?php
// создаём мой автомобиль
$mine = new avtomobil();
$mine ->nazvanie ="BMW";
$mine ->cvet ="Чёрный";
$mine ->moschnost ="200 ЛС";

// создаём её автомобиль
$ejo = new avtomobil();
$ejo -> nazvanie ="Ferrari";
$ejo -> cvet "Красный";
$ejo -> moschnost "300 ЛС";

// двигаем мой автомобиль с места
$mine ->tronutsia();
// увеличиваем скорость до 150 kм/ч
$mine ->ehat(150);

// а вот догоняет её автомобиль
$ejo ->ehat(180);

// о нет, ГИБДД.........
$mine -> ostanovitsia();

?>


Новый объект создаётся при помощи оператора new. Переменной присваивается значение типа "object", обращая её таким образом в объект. Используя оператор -> мы можем обращаться ко всем методам и свойствам объекта. Присвоение значений свойствам объекта идентично присвоению значений переменным.
Используя ООП часто нужно менять значение свойств объекта внутри самого класса. Для этого используется зарезервированная переменная $this, означающая, что свойство принадлежит данному классу.

Код:
<?php
class avtomobil
{
var $nazvanie;
var $cvet;
// .........другие свойства.........

function perekrasit($cvet)
{
[b]$this[/b]-> cvet $cvet;
}
}

$auto =new avtomobil();
$auto->cvet="Красный";
$auto->perekrasit("Чёрный");
?>


Используя $this можно использовать не только "местные" свойства объекта. Также можно выполнять методы.
Ну а теперь пример практического применения класа : создадим класс, который будет отрисовывать ХТМЛ таблицу по заданому количеству строк и столбцов.

Код:
<?php
class tablica
{
var $stroka;
var $stolbec;

// указать количество строк и столбцов
function zadat($stroka,$stolbec)
{
$this->stroka=$stroka;
$this->stolbec=$stolbec;
}

// создать таблицу
function sozdat_tablicu()
{
echo"<table border=1>";

for($x=1;$x<=$this->stroka;$x++)
{
echo"<tr>";
for($y=1;$y<=$this->stolbec;$y++)
{
echo"<td>$x,$y</td>";
}
echo"</tr>";
}
echo"</table>";
}
?>


У этого класса два метода : zadat(), который указывает строк и столбцов будет иметь таблица, и sozdat_tablicu(),  который рисует таблицу по заданым размерам. Вот пример использования :
Код:
<?php
$obj
=new tablica();
$obj->zadat(2,3);
$obj->sozdat_tablicu();
?>


В классе также можно описать функцию, которая будет выполняться автоматически при создании объекта. Такая функция называется конструктором и должна иметь такое же название как и сам класс.
Например : дополним класс методом который присвоит значения переменным по умолчанию.
Код:
<?php
class tablica
{
var $stroka;
var $stolbec;

// создаём
конструктор
function 
tablica()
{
$this->stroka=5;
$this->stolbec=3;
}
}
//другие
методы
?>


Теперь мы можем создать таблицу не задавая ей размеров:

Код:
<?php
$tabl
=new tablica();
$tabl->sozdat_tablicu();
?>



Получим таблицу размером 5x3.

Ну и наконец обратим внимание на одну из самых важных особенностей ООП - наследование. Это очень просто :  просто создадим производный от уже существующего класс, который дополняет родительский класс и наследует его свойства и методы.
Для создания производного класса используется ключевое слово "extends". Теперь создадим класс, производный от класса tablica :

Код:
<?php
class tablica
{

var $stroka;
var $stolbec;
var $ramka;

// указать количество строк и столбцов
function zadat($stroka,$stolbec)
{
$this-> stroka =$stroka;
$this-> stolbec=$stolbec;
}

//создать таблицу
 
function sozdat_tablicu()
 {
echo"<table>";
for($x=1;$x<=$this->stroka;$x++)
{
echo"<tr>";
for($y=1;$y<=$this->stolbec;$y++)
{
echo"<td>$x,$y</td>";
}
echo"</tr>";
}
echo"</table>";
 }
}

class 
novaja_tablica extends tablica
{
function zadat_ramku($tolschina)
{
$this-> ramka =$tolschina;
}
}
?>


Вот вроде бы и всё. Как видите, это не слишком сложно, но всё же постоянно нужно практиковаться и совершенствовать свои знания....

автор: МОРОЗ
Версия для печати
Обсудить на форуме