PHP

ООП в php - объекты и классы

Доброго времени суток дорогой читатель. Сегодня я поговорю с Вами о том, что такое объектно-ориентированное программирование в php, а именно затронем тему объектов и классов. Мне сложно говорить об этом, так как я сам только начал познавать это направление и мои слова могут быть не верными. Поэтому данная тема из области «Как я понял», а не «Повторяй за мной!» Исходя из этого, читаем данную заметку, и если я не прав - поправляем. А если я прав, то желаем удачи.

Первым делом хотелось бы сказать следующее. Данные заметки (я надеюсь их будет много) было бы логичнее размещать в рубрике «Уроки по php», но так как данный материал, больше из области «Я так думаю», нежели «Я это точно знаю», я помещаю его в новую рубрику «Я учусь»

Ладно, давайте приступим.

Что такое объекты и классы

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

Естественно все то, что я только что написал, не ответит Вам на вопрос, что же такое классы и объекты. Именно поэтому нужен простой и до боли знакомый пример.

Я очень долго думал, на каком примере Вам показать, что же такое классы и объекты. Была мыслишка повторить все то, что я слышал от автора курсов по самообучению Си. Он пояснял все на примере братьев наших меньших, от чего у меня шарики за ролики заехали.

Хотя сейчас, после некоторого времени работы с классами, пример с животными мне кажется вполне логичный. Но, как новичку, подобный пример мне не понравился.

В общем я решил показать Вам класс кружки. Да, да... Обычной кружки, в которую мы каждое утро наводим чай или кофе. В общем то это и будет делать наш класс, наводить чай или кофе Улыбаюсь

Для начало давайте поговорим из чего состоит класс. Класс состоит и двух вещей:

Свойства - эта такая некая переменная, которая видна в области всего класса. Точнее в области созданного объекта.
Метод - эта функция внутри класса (объекта)
Давайте создадим наш класс, и объявим в нем свойства:
class glass
{
    var $drink = '';// кофе или чай
    var $water = FALSE;// вода (TRUE вода налита; FALSE вода не налита)
    var $sugar = FALSE;// сахар (TRUE положили сахар; FALSE не положили сахар)
}

Класс объявляется ключевым словом class, после чего идет имя класса. Я назвал класс glass, что в переводе стакан (если верить гугл транслейт)

В теле класса я создал три свойства:

drink - в данное свойства мы будим помещать ингредиент (чай или кофе)
water - данное свойство будет вмещать в себя воду. Если точнее то наличие воды или ее отсутствие
sugar - свойство содержащие информацию о наличие (или же отсутствие) сахара в кружке.


Теперь давайте создадим методы класса. Методов будет четыре. Нам понадобятся такие действия как:

Положить чай или кофе в кружку
Положить сахар
Налить воды
Помешать содержимое кружки
class glass
{
    var $drink = '';// кофе или чай
    var $water = FALSE;// вода (TRUE вода налита; FALSE вода не налита)
    var $sugar = FALSE;// сахар (TRUE положили сахар; FALSE не положили сахар)
    
    // положить в кружку кофе или чай.. ну или еще что-нить =)
    function set_drink($name)
    {
        $this->drink = $name;
    }
    
    // налить в кружку воды
    function set_water()
    {
        $this->water = TRUE;
    }
    
    // положить сахар
    function set_sugar()
    {
        $this->sugar = TRUE;
    }
    
    // мешать содержимое кружки ложкой
    function interfere_with()
    {
        if (empty($this->drink) AND $this->water == FALSE AND $this->sugar == FALSE)
            return "Дзынь-дзынь... кружка пуста, и я не знаю какого результата Вы ждете =(";
       
        if (!empty($this->drink) AND $this->water == FALSE AND $this->sugar == FALSE)
            return "Странный скрежет... К сожалению результата нет =(";

         if (!empty($this->drink) AND $this->water == TRUE AND $this->sugar == FALSE)
            return "Дзынь-дзынь... Ура! Вы получили НЕ сладкий ".$this->drink;   
    
        if (!empty($this->drink) AND $this->water == TRUE AND $this->sugar == TRUE)
            return "Дзынь-дзынь... Ура! Вы получили сладкий ".$this->drink;

        if (empty($this->drink) AND $this->water == TRUE AND $this->sugar == TRUE)
            return "Дзынь-дзынь... Ура! Вы получили cладкую воду";
        
        if (empty($this->drink) AND $this->water == FALSE AND $this->sugar == TRUE)
            return "Странный скрежет... К сожалению результата нет =(";
            
        if (empty($this->drink) AND $this->water == TRUE AND $this->sugar == FALSE)
            return "Дзынь-дзынь... В кружке просто вода";            
            
        if (!empty($this->drink) AND $this->water == FALSE AND $this->sugar == TRUE)
            return "Странный скрежет... К сожалению результата нет =(";
    }
}

Как видите обращение к свойствам внутри класса происходит с помощью ключевого слова $this-> Так как свойства видны в приделах всего класса (объекта) то нам не составит труда написать методы которые меняли бы значение свойств.

Кстати, если свойство имеет область видимости public (о видимости поговорим в других заметках), то у Вас будет возможность менять его значение не в классе. Сейчас не заморачивайтесь по данному поводу, мы еще об этом обязательно поговорим.

Думаю данный класс слишком мал, что бы озадачить Вас. Напротив, считаю что он настолько прост, что должен не генерировать вопросы, а ответить на них Улыбаюсь

Давайте опробуем то что у нас получилось. Создадим объект класса.
$glass = new glass();

Объект создается через ключевое слово new. После чего идет имя класса.

Давайте наполним кружку водой, и хорошенько размешаем.
$glass->set_water();// зальем водой

echo $glass->interfere_with();// помешаем

хм... Давайте добавим сахару
$glass->set_water();// зальем водой
$glass->set_sugar();// насыпим сахар

echo $glass->interfere_with();// помешаем


сладкая вода

Ну а теперь давайте добавим все ингредиенты
$glass->set_drink('кофе');// насыпим кофе
$glass->set_sugar();// насыпим сахар
$glass->set_water();// зальем водой

echo $glass->interfere_with();// помешаем

сладкий кофе

Данный пример конечно не покажет Вам всей пользы использования ООП, но если у Вас богатая фантазия, то Вы уже скорее всего увидели какие горизонты Вам открылись.

Заключение

Мне осталось добавить, что объектов одного класса можно создать сколько угодно. Поэтому на своем столе (экране), Вы можете расположить несколько кружек, с разными напитками.

Надеюсь данный пример Вам поможет приблизительно понять, что такое классы и объекты. Если есть какие либо вопросы, или просто комментарии, то пишите.

Всего Вам наилучшего! У меня все.
Добавлено: 03 Сентября 2013 07:42:35 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...