Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ООП в PHP. Классы и объекты 
:(
    Опции темы
Mal Hack
Дата 22.5.2005, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



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

Ниже я попробую донести до тех, кто только начинает знакомиться с объектно-ориентированным программированием его суть и применение в веб-проектировании, в частности в PHP.

Рассмотрим все по порядку:

1. ООП. Плюсы и минусы.
2. Классы и объекты, основные определения.
3. Конструктор, деструктор.
4. Класс HelloWorld.
5. Наследование.
6. Классы и объекты в PHP5.

---------------------------------------------------------------------------

 1. ООП. Плюсы и минусы. 

Плюсы:
  • Удобство редактирования код, поскольку при большом файле, где бы у вас хранилось около 150 функций, было бы тяжело сориентироваться
  • Удобство модификации, поскольку вам достаточно лишь изменить тот или иной метод класса, не переписывая при этом основной код программы.
  • Повышение безопасности, при грамотном использовании.
  • Увеличение времени работы скрипта, при грамотном использовании.
Что касается минусов, то при Неправильном проектировании все вышеперечисленные плюсы окажутся в минусе. Под проектирование понимается описание структуры класса, его свойств и методов описываемых в нем, взаимодействие объектов.

Главное – правильно спроектировать объектную модель вашего приложения. Четко определить, что будет делать тот или иной метод и что будет хранить то или иное свойство. 

Использование объектно-ориентированного программирование должно быть обоснованным, т.е. писать класс для сохранения файла не нужно. Это – не рационально.

В PHP понятие ООП не так ярко показано, как в визуальных языках программирования. В PHP объекты носят лишь информационный характер, и по сути в PHP реализован лишь синтаксис объектов. Правда, в 5 версии интерпретатора эти огрехи были устранены, но об этом позже.

 Классы и объекты, основные определения. 

Основным понятием объектно-ориентированного программирования является класс.

Класс это лишь описание методов и свойств. Класс не создается и не используется в программе.

Объект - это переменная, которая имеет свойства и методы, описанные в классе, от которого он создается. Вы можете создать несколько объектов от одного класса.

Свойство – это та же самая переменная, только внутри объекта.

Метод – это та же самая функция, только внутри объекта.


3. Конструктор, деструктор. 

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

Деструктор аналогичен конструктору за исключением того, что вызывается при уничтожении объекта. К примеру в деструктор может быть встроена функция разрыва соединения с базой данных или сохранения файла. Деструкторы не присутствуют в PHP4, но в 5 версии они есть.

В PHP4 имя конструктора должно соответствовать имени класса, в PHP5 – имя конструктора – статично __constructor, а деструктор - __destructor.

 4. Класс HelloWorld.

Итак, опишем класс:
Код
 <?php

 class HelloWorld
  {
   var $str = "Hello";
   var $stt;

   function HelloWorld()
    {
     $this -> stt = " ";
    }

   function Add( $str )
    {
     $this -> stt .= $str;
    }
  }

?>

Мы описываем два свойства str & stt, причем свойству str сразу присваиваем первоначально значение.

Затем идет описание конструктора, в котором свойству stt присваивается значение пробела.

$this -> обозначает обращение к свойству или методу внутри объекта.

Далее мы описываем метод Add, который прибавляет к свойству stt строковое значение, переданное ему в качестве параметра.

Теперь создадим объект от нашего класса и посмотрим, как о будет работать.
Код
<?php

 $Obj = & new HelloWorld();
 $Obj -> Add( "Autor" );
 print $Obj -> str . $Obj -> stt;

?>

Первым делом мы создаем объект с помощью слова new. Знак & ставим перед ним для того, чтобы у нас не создавался дубликат объекта.

Затем вызываем метод Add, передавая ему в качестве параметра строку «Autor».
Затем выводим единую строку из свойств объекта. На выходе получим фразу «Hello Autor».

Вот в принципе и все. Я описал основы объектно-ориентированного программирования. Еще раз скажу, что главное – правильно спроектировать классы.

 5. Наследование.

Наследование позволяет создавать иерархию классов. По сути, подкласс получает свойства и методы класса.

Объясню на примере.
Код
 <?php

 class HelloWorld
  {
   var $str = "Hello";
   var $stt = "";

   function HelloWorld()
    {
     $this -> stt = " ";
    }
  }

 class Garry extends HelloWorld
  {
   function Add( $str )
    {
     $this -> stt .= $str;
    }
  }

 $Obj = & new Garry();
 $Obj -> Add( "Autor" );
 print $Obj -> str . $Obj -> stt;

?>

Подкласс Garry наследует все от класса HelloWorld, поэтому объект, созданный от класса Garry будет содержать свойства и методы, объявленные внутри двух классов.

6. Классы и объекты в PHP5. 

Кроме уже упоминавшегося ранее изменения имени конструктора  появления деструктора объектно-ориентированная модель в PHP5 претерпела еще ряд изменений.

Теперь для создании копии объекта можно использовать скрытый метод __clone();

Добавлены уровни доступа к свойствам и методам: private, public, protected. Если раньше все методы и свойства были доступны извне объекта, то теперь можно указывать уровень доступа к ним.
  • private – методы и свойства доступны только внутри объекта.
  • public – методы и свойства доступны извне объекта
  • protected – методы и свойства доступны только в том классе, где объявляются.
Есть еще static, который указывается перед одним из этих интерфейсов. При объявлении метода static, вы можете получить к нему доступ, не создавая объекта.

Помимо этого появилось множественное наследование, т.е. теперь подкласс может наследовать свойства и методы, объявленные в нескольких классах.
Код
<?php

class child implements parents1,parents2
  {
   ….
  }

?>


Также введено понятие абстрактного класса. Он может быть использован лишь как наследуемый, т.е. объектов от него непосредственно создать нельзя. Для объявления абстрактного класса пишется следующий код:
Код
<?php

abstract class ClassName
  {
   ….
  }

?>


Еще очень интересная вещь - __call();. Этот метод вызывается в том случае (если он определен вами), когда вы пытаетесь обратиться к несуществующему в классе методу или свойству. По сути его можно использовать и для перегрузки функций.

Скрытые методы __get(); & __set(); могут использоваться для «отлова» всех попыток обращений к несуществующим методам или свойствам.

PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1255 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.