Web - кодинг: PHP:


Объектно-ориентированое программирование на PHP



  Автор: МОРОЗ
  Источник:

";
            for (
$y=1$y<=$this<font color="#006600">->stolbec;$y++)
            {
                echo 
"
";
            }
            echo 
"
";
        }
        echo 
"
Начинающие программисты на PHP чаще всего застревают на том, что не совсем понимают что же это за зверь такой (объектно-ориентированное программирование - OOP (Object Oriented Programming)) и для чего он нужен. В данной статье попытаюсь объяснить примерно что это такое. Не претендую на полное описание и единственно верное, просто изложу своё понятие об этом.

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

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

Синтаксис написания класса похож на синтаксис написания функции, только вместо ключевого слова function мы используем ключевое слово class:

<?
php
class klas
s{
    
//
здесь
описиваем свойства объекта

    
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
//
создаём
мой автомобиль

$m
ine
= 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 ЛС";

//
двигаем
мой автомобиль с места

$m
ine <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 
$st
olbec;
    
    
//
указать
количество строк и столбцов

    
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 
"
";
            }
            echo 
"
";
        }
        echo 
"
$x, $y
";

    }

}
<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 
$st
olbec;

    
//
создаём
конструктор

    
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 
$st
olbec;
    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 
"
$x, $y
";

    }

}

class 
novaja_tablica extends tablica
{
    function 
zadat_ramku($tolschina)
    {
        
$this

<font color="black">-> ramka =
$tolschina;
    }
}

<font color="#0000cc">?>



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





При перепечатке любого материала с сайта, видимая ссылка на источник www.warayg.narod.ru и все имена, ссылки авторов обязательны.

© 2005