Главная страница статей --> Советы по фотошопу, графике и хитрости в построении php кода

Классы и объекты в РНР со Штирлицом и Мюллером

Источник: http://www.apasov.com/


Страницы статьи: [1] [2] [3]

Очень рекомендуем посетить сайт автора статьи: www.apasov.com


PHP так же как и большинство современных языков программирования высокого уровня, таких как С, Паскаль, Java и т.д. является объектно-ориентированным. В этой статье мы как раз и узнаем что же такое эти объекты на которые он ориентирован и в чем причина и польза (или вред) такой ориентации. Я думаю, что эту статью интересно будет прочитать и тем, кто изучает не PHP, а другие языки, потому что в них во всех понятия классов и объектов одинаковы, разный только синтаксис.

Мы раскроем нашу тему на примере небольшого скрипта, который называется "Штирлиц и Мюллер". У Штирлица и Мюллера на двоих имеется 0.7 литра шнапса и 0.5 литра водки. Но Мюллер является немецким офицером и может пить только шнапс, тогда как Штирлиц помимо того, что он немецкий офицер, одновременно ещё и является советским разведчиком майором Исаевым, поэтому способен пить не только шнапс, но и водку. С каждым нажатием кнопки один из них выпивает 100 грамм того или иного напитка. А теперь зайдите сюда и сделайте так, чтобы из имеющихся 1.2 литра спиртного Штирлиц выпил как минимум 0.9 литра. Но не забывайте и про Мюллера.

А теперь посмотрим как работает этот скрипт.
Вот его основной код:

<?
заголовок();

$Мюллер = new Немецкий_Офицер;
$Штирлиц = new Советский_Разведчик;

$Мюллер->имя = Мюллер;
$Штирлиц->имя = Штирлиц;
$Штирлиц->настоящее_имя = майор Исаев;

extract($_POST);
статистика();

if(
$Желание_Мюллера ==Хочу шнапса!) {
   
$Мюллер->Выпить_Шнапса($Шнапс);
   
$Мюллер->Самочувствие();
}
if(
$Желание_Штирлица ==Хочу шнапса!) {
   
$Штирлиц->Выпить_Шнапса($Шнапс);
   
$Штирлиц->Самочувствие();
}
if(
$Желание_Штирлица ==Хочу водки!) {
   
$Штирлиц->Выпить_Водки($Водка);
   
$Штирлиц->Самочувствие();
}

$Выпитое_Горючее = $Мюллер->Выпитый_Шнапс..$Штирлиц->Выпитый_Шнапс..$Штирлиц->Выпитая_Водка;

$Мюллер->Желания();
$Штирлиц->Желания();

выпитое($Штирлиц,$Мюллер);
запасы($Шнапс, $Водка);

окончание();

exit;

Одна из прелестей PHP в том, что код можно писать не только на английском, но и на многих других языках, в том числе и на русском, что вы и видите в данном примере. ( Имена переменных, функций, классов, объектов и т.д. в PHP могут состоять не только из латинских букв, но также могут содержать знак подчеркивания _, цифры (но не должны начинаться с цифр) и любие символы из расширенного набора ASCII ( ASCII-коды от 127 до 255 (0x7f-0xff) ), куда входят и хорошо нам знакомые значки кириллицы )

Итак, начнём с начала. <? - это начало любого PHP-кода, а ?> - его конец. Всё, что находится между этими значками, сервер обрабатывает как программу на PHP, а все что за ними - как простой HTML.

Далее идёт функция заголовок().

Функция - это то же, что процедура или подпрограмма - кусок кода, который выполняет какое-то действие. Функции используются для того, чтобы не писать один и тот же код несколько раз, а, написав его единожды, вызывать его потом сколько угодно раз всего одним словом - названием функции.

В этом скрипте несколько функций:

<?
заголовок();

extract($_POST);
статистика();

$Мюллер->Выпить_Шнапса($Шнапс);
$Мюллер->Самочувствие();
$Штирлиц->Выпить_Шнапса($Шнапс);
$Штирлиц->Самочувствие();
$Штирлиц->Выпить_Водки($Водка);
$Мюллер->Желания();
$Штирлиц->Желания();

выпитое($Штирлиц,$Мюллер);
запасы($Шнапс, $Водка);

окончание();

Одна из них - встроенная ( это - extract() ), а остальные - написанные пользователем (User-defined functions).
Встроенные функции написаны на Си и находятся в самом коде PHP, подробное описание каждой из них вы можете прочитать в PHP Manual. А для того чтобы заработали user-defined функции их надо сначала описать (обычно в конце программы или в отдельном файле). Делается это так:

function заголовок() {
    echo
<HTML><HEAD><TITLE>Штирлиц и Мюллер</TITLE><meta content=\text/html ; CHARSET=windows-1251\ http-equiv=\Content-Type\></HEAD><BODY>;
}

echo - это встроенная функция. Она выводит текст который стоит после неё в кавычках. Если в самом выводимом тексте есть кавычки то перед каждой из них надо кинуть вот такую палочку - \

Функция заголовок() выводит на экран HTML-заголовки - название страницы и мета-таг указывающий кодировку. Кстати, если вы видите на русскоязычных страницах непонятную абракадабру вместо великого и могучего, и вам приходится самостоятельно выставлять кодировку в браузере - это означает, что вебмастер забыл вставить именно этот мета-таг. Не повторяйте чужих ошибок и всегда помните об этом, когда пишете русскоязычные страницы.

А вот теперь мы и подошли к самому интересному, к нашей основной теме "Классы и Объекты".
Если перевести этот код

$Мюллер = new Немецкий_Офицер;
$Штирлиц = new Советский_Разведчик;

с программного языка на человеческий, то он будет означать следующее:

$Мюллер - новый объект класса Немецкий_Офицер
$Штирлиц
- новый объект класса Советский_Разведчик

Класс - это описание возможностей (набора функций) и переменных, которыми обладает любой объект данного класса. Польза та же, что и от функций - не нужно писать много раз одно и то же. А следовательно увеличивается скорость написания программ, облегчается понимание того, как они работают, и где могут крыться ошибки. Описав класс один раз, можно создавать сколько угодно объектов этого класса и все они будут обладать одинаковыми возможностями. Так что мы с легкостью можем написать, к примеру

$Борман = new Немецкий_Офицер;
$Шелленберг = new Немецкий_Офицер;
$Радистка_Кэт = new Советский_Разведчик;

Итак, мы установили, что класс - это не что иное, как набор функций и переменных, с которыми работают эти функции. Как и функции, классы обычно описываются в конце программы или в отдельном файле.

Посмотрим, какими же функциями обладает каждый Немецкий_Офицер:

class Немецкий_Офицер {

    function
Немецкий_Офицер () {
       
$this->Острая_Необходимость = Хочу шнапса!;
    }

    function
Желания() {
        global
$Шнапс, $Водка, $Выпитое_Горючее;
        echo
Я - .$this->имя..
        <FORM METHOD=POST>
            <INPUT TYPE=hidden name=Шнапс value=$Шнапс>
            <INPUT TYPE=hidden name=Водка value=$Водка>
            <INPUT TYPE=hidden name=Выпитое_Горючее value=$Выпитое_Горючее>
            <INPUT TYPE=submit name=Желание_
.$this->имя.а value=.$this->Острая_Необходимость.>
        </FORM><BR>
;
    }

    function
Выпить_Шнапса($Шнапс) {
        global
$Шнапс;
        if(
$Шнапс != 0) {
            
$Шнапс=$Шнапс - 0.1;
            
$this->Выпитый_Шнапс = $this->Выпитый_Шнапс + 0.1;
            echo
$this->имя. только что выпил 100 грамм шнапса.<BR>Шнапса осталось $Шнапс литра.<BR>;
        } else {
            echo
Шнапс кончился.<BR>;
        }
    }
    function
Самочувствие() {
        if(
$this->Выпитый_Шнапс + $this->Выпитая_Водка > 0.8) {
            echo
$this->имя. выпил .$this->Выпитый_Шнапс. литра шнапса и .$this->Выпитая_Водка. литра водки.<BR>;
            echo
$this->имя. склонился над картой Советского Союза.<BR>;
            echo
Его неудержимо рвёт на Родину.<BR>;
            
окончание();
            exit;
        } elseif(
$this->Выпитый_Шнапс or $this->Выпитая_Водка) {
            echo
$this->имя.у хорошо. Но он хочет ещё.<BR><BR>;
        }
    }
}

Как видим, он может рассказать нам о своих Желаниях(), Выпить_Шнапса() и поведать о своем Самочувствии() после выпитого.

В этом классе есть ещё одна функция - Немецкий_Офицер(). Она особенная и отличается от всех других, тем, что её название в точности совпадает с названием самого класса. Такая функция называется конструктор. Слово "конструктор" в английском языке значит совсем не то, что в русском, а обозначает того, кто что-то конструирует. Конструктор - это функция которая выполняется автоматически, когда создаётся (конструируется) новый объект данного класса. То есть когда рождается каждый новый Немецкий_Офицер он сразу начинает испытывать естественную для каждого истинного Немецкого_Офицера Острую_Необходимость Выпить_Шнапса.

А теперь посмотрим, что может Советский_Разведчик



Похожие статьи:
- Гостевая книга из Perlовки
- Создание динамических форм с помощью JavaScript
- Использование модуля для работы с шаблонами
- Фильтрация и сортировка в ASP
- Приватность в Интернет
- Преобразование XML + XSLT с помощью Sablotron
- Классы и объекты в РНР со Штирлицом и Мюллером
- Как назвать Web-сайт?
- Дядя Гугл — великан
- Создание простого чата на ASP
- Сверхдинамичные веб-интерфейсы
- "Грабим" странички
- Поисковая оптимизация сайта


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.002]