PHP ООП

23 July 2007 – 11:44

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

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

Что б через пол года-год вспомнить, какие я решал задачи и восстановить в голове структуру класса больше минуты не потребуется, а что было бы при написании всего проекта (с классами конфига и т.д.) в процедурном стиле? Ни за минуту, ни за десять все детали вспомнить не удастся, начнется игра в угадайку, с известными последствиями.

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

  1.  
  2. class ThumbnailsMake {
  3. public $thmbW, $thmbH, $plist;
  4.  
  5.     public function __construct($thmbW = 100, $thmbH = 100, $plist = ""){
  6.         $this->thmbW = $thmbW;
  7.         $this->thmbH = $thmbH;
  8.         $this->plist = $plist;
  9.     }
  10.  
  11.     public function getPics($conf_picdir){
  12.         $piclist = array();
  13.         $cdir = opendir($conf_picdir);
  14.         while(($pic = readdir($cdir)) != false ){
  15.             if(($pic != ".") && ( $pic != ".." )){
  16.                 if($this->isPic($pic)){
  17.                     array_push($piclist,$pic);
  18.                 }
  19.             }
  20.         }
  21.         $this->plist = $piclist;
  22.     }
  23.  
  24.     private function isPic($isp){
  25.         $ff = substr(strrchr($isp,"."),1);
  26.         if(($ff == 'jpg') || ($ff == 'jpeg') || ($ff == 'gif') ||($ff == 'png')){
  27.             return true;
  28.         }else{
  29.             return false;
  30.         }
  31.     }
  32.  
  33.     public function makeThmbnl($pic){
  34.         $size = getimagesize($pic);
  35.         $pic_t = imagecreatetruecolor($this->thmbW, $this->thmbH);
  36.         if($size['mime'] == 'image/jpeg'){
  37.             $pic_n = imagecreatefromjpeg($pic);
  38.             imagecopyresampled($pic_t, $pic_n, 0, 0, 0, 0, imagesx($pic_t), imagesy($pic_t), imagesx($pic_n), imagesy($pic_n));
  39.             // header('Content-type: image/jpeg');
  40.             imagejpeg($pic_t, $conf_lct.$pic);
  41.         }
  42.         if($size['mime'] == 'image/gif'){
  43.             ...
  44.         }
  45.         if($size['mime'] == 'image/png'){
  46.             ...
  47.         }
  48.         imagedestroy($pic_t); imagedestroy($pic_n);
  49.     }
  50. }
  51.  
  1. комментарии (3) to “PHP ООП”

  2.   svip -- Jul 30, 2007

    Не соглашусь по поводу классов и процедур. Все преимущества которые ты описал для классов с легкостью подходят и для функций.
    “Что б через пол года-год вспомнить, какие я решал задачи и восстановить в голове структуру класса больше минуты не потребуется, а что было бы при написании всего проекта (с классами конфига и т.д.) в процедурном стиле? Ни за минуту, ни за десять все детали вспомнить не удастся, начнется игра в угадайку, с известными последствиями.”

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

    Не хотел никого обидеть. Все написанное выше - чисто мое мнение. С уважением Svip


  3.   Alex -- Aug 10, 2007

    Интересных иерархий на функциях построить не удастся. И потом, как быть с 3 принципами: наследованием, инкапсуляцией, полиморфизмом?


  4.   Николай -- Oct 10, 2007

    if(($ff == ‘jpg’) || ($ff == ‘jpeg’) || ($ff == ‘gif’) ||($ff == ‘png’)){
    return true;
    }else{
    return false;
    }

    можно переписать просто как

    return (($ff == ‘jpg’) || ($ff == ‘jpeg’) || ($ff == ‘gif’) ||($ff == ‘png’));


Комментировать