Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Классы в PHP (ООП) - в чем преимущество ?
 
 автор: DDK   (07.11.2006 в 19:23)   письмо автору
 
 

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

   
 
 автор: cheops   (07.11.2006 в 22:08)   письмо автору
 
   для: DDK   (07.11.2006 в 19:23)
 

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

Использование объектно-ориентированного подхода к месту и не к месту не приводит автоматически к успешному проекту. Программирование новичка в стиле объектно-ориентированного программирования часто напоминает переход по минному полю — если не знать где мины, успешное достижение конца проекта невозможно. Например, создаётся гостевая книга, пишется класс для помещения информации в базу данных или файл и класс для вывода этой информации из базы данных. В результате код в 3 раза превышает код, который использовался бы без объектно-ориентированного подхода. Разумеется, ни о каком повторном его использовании речи не идёт, так как гостевая книга разработана один раз и больше классы нигде не нужны. Прозрачные, выверенные, отточенные в течении десятилетий на нескольких языках программирования интерфейсы доступа к файлам (или базе данных) заменяются на свой собственный интерфейс, который не известен никому кроме разработчика. В результате читабельность программы только уменьшается. Кроме того, так как код гостевой книги зачастую мал, ни о каком программировании в терминах реального мира речи не идёт — разработчик по прежнему программирует в терминах компьютерного мира (класс доступа к файлу, класс вывода содержимого файла).

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

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=161
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3061
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=6076
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=11514

   
 
 автор: DDK   (08.11.2006 в 00:00)   письмо автору
 
   для: cheops   (07.11.2006 в 22:08)
 

Спасибо, Игорь, за такой прекрасный ликбез ! Теперь всё понял.

   
 
 автор: AtomicBlast   (08.11.2006 в 12:34)
 
   для: cheops   (07.11.2006 в 22:08)
 

Структура базы данных - таблица gb


id
fio
date
email
msg


Класс для подключения к базе данных MySQL


class DataBase
{
     private $dbHost, $dbName, $dbUser, $dbPassword, $dbLink, $dbResult;

     public function __construct($dbHost, $dbName, $dbUser, $dbPassword, $dbLink, $dbResult)
     {
         $this->dbHost = $dbHost;
         $this->dbName = $dbName;
         $this->dbUser = $dbUser;
         $this->dbPassword = $dbPassword;
         $this->dbLink = @mysql_connect($this->dbHost, $this->dbUser, $this->dbPassword);
         @mysql_select_db($this->dbName);
     }
     
     public function __destruct()
     {
        @mysql_close($this->dbLink);
     }

    public function Query($sql)
    {
        if($this->dbResult = mysql_query($sql))
           return true;
        else
           return false;
    }

  public function dbToArray($sql)
  {
    $this->dbQuery($sql);
    if(($this->dbNumRows($sql)) > 0)
    {
      while($tmp=@mysql_fetch_array($this->dbResult))
      {
        $data[]=$tmp;
      }
        return $data;
    }
    else
    {
      return false;
    }
  }

  public function dbNumRows($sql)
  {
        $this->dbQuery($sql);
        $row = @mysql_num_rows($this->dbResult);
        return $row;
  }
}


Класс гостевой книги


class GuestBook
{
  public $id, $fio, $date, $email, $msg;
    
  public function __construct($id, $fio, $date, $email, $msg)
  {
    $this->id = $id;
    $this->fio = $fio;
    $this->date = $date;
    $this->email = $email;
    $this->msg = $msg;
  }
}


Рабочий класс для работы с б.д.


class GuestBookDb
{
    private $db
    
    public function __construct($db)
    {
        $db = $db;
    }
    
    public function Select()
    {
      $sql = "SELECT * FROM gb";
      $dbArray = $this->db->dbToArray($sql);
      if($this->db->dbNumRows($sql)>0)
      {
        foreach($dbArray as $dbAr)
        {
            $myArray[] = new GuestBook($dbAr['id'], $dbAr['fio'], $dbAr['date'], $dbAr['email'], $dbAr['msg']);
        }
        return $myArray;
      }
      else
      {
        return false;
      }
    }
    
    public function SelectWithId($id)
    {
      $sql = "SELECT * FROM gb WHERE id = '$id'";
      $dbArray = $this->db->dbToArray($sql);
      if($this->db->dbNumRows($sql)>0)
      {
        foreach($dbArray as $dbAr)
        {
            $myArray = new GuestBook($dbAr['id'], $dbAr['fio'], $dbAr['date'], $dbAr['email'], $dbAr['msg']);
        }
        return $myArray;
      }
      else
      {
        return false;
      }
    }
    
    public function Insert($obj)
    {
        $sql = "INSERT INTO gb (fio, date, email, msg) VALUES ('$obj->fio', '$obj->date', '$obj->email', '$obj->msg')";
        $this->db->dbQuery($sql);
    }

// Методы для обновления и удаления записей
}


Рабочий код для вывода...
Расписывать класс не буду... Идея в том, что надо работать (при выборке) с массивами объектов... типа, так:


$db = new DataBase($dbHost, $dbName, $dbUser, $dbPassword, $dbLink, $dbResult);
$gb = new GuestBookWork($db);
$array = $gb->Select();
foreach($array as $ar)
{
    //$ar->fio, $ar->date etc
}


Чтобы произвести вставку в базу данных надо:


$db = new DataBase($dbHost, $dbName, $dbUser, $dbPassword, $dbLink, $dbResult);
$gb = new GuestBookWork($db);
$gbNew = new GuestBook(null, $fio, $date, $email, $msg);
$gb->Insert($gbNew);


В общем где-то так...

   
 
 автор: AtomicBlast   (08.11.2006 в 12:37)
 
   для: AtomicBlast   (08.11.2006 в 12:34)
 

Малех ошибся... не GuestBookWork, а GuestBookGb :)

   
 
 автор: AtomicBlast   (08.11.2006 в 12:38)
 
   для: AtomicBlast   (08.11.2006 в 12:37)
 

GuestBookDb... блин... вот что работа с человеком делает.... :(

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования