Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Чем отличаются классы от функций

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
koras
Отправлено: 09 Июня, 2011 - 09:44:13
Post Id



Частый гость


Покинул форум
Сообщений всего: 224
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




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

Есть код.

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. Class Jpg_rzs {
  4.        
  5.  function Jpg_rz ($file, $wh, $hg)
  6.         {
  7.                 #       $file -файл
  8.                 #       $wh - ширина
  9.                 #       $hg - высота
  10.                        
  11.                 #       calculate the file size
  12.                                 $size = getimagesize ($file);
  13.                                 $size_w = $size[0];
  14.                                 $size_h = $size[1];
  15.                                 $file_new = imagecreatetruecolor ($wh, $hg);
  16.                                 # create new file
  17.                                 $im = imagecreatefromjpeg ($file);
  18.                                 imagecopyresampled ($file_new,$im, 0, 0, 0, 0, $wh, $hg, $size_w, $size_h);
  19.  
  20.                 return $file_new;        
  21.         }
  22. }
  23.  
  24.  
  25. $files_jpg = "/html/www/media/".$while_theme['importid'].".jpg";
  26.  
  27. $object = new Jpg_rzs;
  28.  
  29. $file_90 = $object->Jpg_rz($files_jpg ,'90','90');
  30. imageJpeg ($file_90 , '/html/www/media/thumb/'.$while_theme['importid'].'_thumb.jpg');
  31.  
  32. $file_240 = $object->Jpg_rz($files_jpg,'240','240');
  33. imageJpeg ($file_240 , '/html/www/media/240/'.$while_theme['importid'].'.jpg');
  34.  
  35.  

Но этот же код можно переписать более компактно и в виде функции и не использовать объекты и так далее.



PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4.  function Jpg_rz ($file, $wh, $hg)
  5.         {
  6.                 #       $file -файл
  7.                 #       $wh - ширина
  8.                 #       $hg - высота
  9.                        
  10.                 #       calculate the file size
  11.                                 $size = getimagesize ($file);
  12.                                 $size_w = $size[0];
  13.                                 $size_h = $size[1];
  14.                                 $file_new = imagecreatetruecolor ($wh, $hg);
  15.                                 # create new file
  16.                                 $im = imagecreatefromjpeg ($file);
  17.                                 imagecopyresampled ($file_new,$im, 0, 0, 0, 0, $wh, $hg, $size_w, $size_h);
  18.  
  19.                 return $file_new;        
  20.         }
  21.  
  22. $files_jpg = "/html/www/media/".$while_theme['importid'].".jpg";
  23.  
  24.  
  25. $file_90 = Jpg_rz($files_jpg ,'90','90');
  26. imageJpeg ($file_90 , '/html/www/media/thumb/'.$while_theme['importid'].'_thumb.jpg');
  27.  
  28. $file_240 = Jpg_rz($files_jpg,'240','240');
  29. imageJpeg ($file_240 , '/html/www/media/240/'.$while_theme['importid'].'.jpg');
  30.  
  31.  


Какое преимущество классов над функцией.
 
 Top
EuGen Администратор
Отправлено: 09 Июня, 2011 - 09:56:13
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Ваш учебник очень старый. Конструкторы носили имена классов в бытие PHP 4.

А вообще могу дать общий совет - если Вы не понимаете в чем преимущество ООП, то лучше его пока не использовать. Со временем, уверен, Вы к этому придете сами.

Почитать про ООП можете здесь на форуме, в ветку уроков. Ну и общие вещи
http://php.su/learnphp/phpoo/


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 10 Июня, 2011 - 00:35:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




koras ваш пример не раскрывает весь смак классов..

Например есть класс "машина"

Что она может? В вашем примере - только ржаветь на стоянке (единственный метод)

А на деле?
Бибикать, заводиться, глушиться, газовать, тормозить, поворачивать (вправо/влево), ехать (вперед/назад)...
Так поехали...
PHP:
скопировать код в буфер обмена
  1. class car {
  2.   var $engine = "off"; // движок заглушен
  3.   var $fuel = 0.99; // полный бак
  4.                            // за одно действие минус 0.01 из бака
  5.                            // щас даже метод расхода топлива отпишем
  6.   function __construct() {
  7.       $this->engine = "on";
  8.       $this->rashod(); // о виш - бензин кончается.
  9.     }
  10.   function rashod() {
  11.     if ($this->fuel > 0.01) $this->fuel -= 0.01;
  12.     else die("все папаша - бензина нема...");
  13.     }
  14.   function gaz($accelerate) {
  15.     if ($this->engine == "on") { // если движок не заглушен
  16.       while ($accelerate > 0) {
  17.         echo "ревет движок!!!<br />";
  18.         $this->rashod(); // чем сильней газуешь
  19.         $accelerate--; // тем больше расход бензина
  20.         }
  21.       }
  22.     else die("заведи тачку м***ло...");
  23.     }
  24.   function beep() {
  25.     echo "Фа!!! Фа!!!<br />";
  26.     }
  27.   function stop() {
  28.     $this->engine = "off";
  29.     }
  30.   }
  31.  
  32. $car = new car; // завелись сразу
  33. $car->beep(); // Фа!!! Фа!!!
  34. $car->gaz(30); // сожрет из бака 0.30 едениц топлива
  35. $car->stop(); // заглушили
  36. $car->gaz(20); // заведи тачку м***ло...
  37.  


Ну вот как-то так... Радость

(Отредактировано автором: 10 Июня, 2011 - 00:39:32)

 
 Top
komprenda
Отправлено: 10 Июня, 2011 - 22:23:55
Post Id


Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  


Помог: 3 раз(а)




DeepVarvar пишет:
koras ваш пример не раскрывает весь смак классов..

Например есть класс "машина"

Что она может? В вашем примере - только ржаветь на стоянке (единственный метод)

А на деле?
Бибикать, заводиться, глушиться, газовать, тормозить, поворачивать (вправо/влево), ехать (вперед/назад)...
Так поехали...
PHP:
скопировать код в буфер обмена
  1. class car {
  2.   var $engine = "off"; // движок заглушен
  3.   var $fuel = 0.99; // полный бак
  4.                            // за одно действие минус 0.01 из бака
  5.                            // щас даже метод расхода топлива отпишем
  6.   function __construct() {
  7.       $this->engine = "on";
  8.       $this->rashod(); // о виш - бензин кончается.
  9.     }
  10.   function rashod() {
  11.     if ($this->fuel > 0.01) $this->fuel -= 0.01;
  12.     else die("все папаша - бензина нема...");
  13.     }
  14.   function gaz($accelerate) {
  15.     if ($this->engine == "on") { // если движок не заглушен
  16.       while ($accelerate > 0) {
  17.         echo "ревет движок!!!<br />";
  18.         $this->rashod(); // чем сильней газуешь
  19.         $accelerate--; // тем больше расход бензина
  20.         }
  21.       }
  22.     else die("заведи тачку м***ло...");
  23.     }
  24.   function beep() {
  25.     echo "Фа!!! Фа!!!<br />";
  26.     }
  27.   function stop() {
  28.     $this->engine = "off";
  29.     }
  30.   }
  31.  
  32. $car = new car; // завелись сразу
  33. $car->beep(); // Фа!!! Фа!!!
  34. $car->gaz(30); // сожрет из бака 0.30 едениц топлива
  35. $car->stop(); // заглушили
  36. $car->gaz(20); // заведи тачку м***ло...
  37.  


Ну вот как-то так... Радость


Джанет Валейд "PHP для чайников" пример от туда, не очень хорошая книга
 
 Top
DeepVarvar Супермодератор
Отправлено: 10 Июня, 2011 - 22:33:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




komprenda пишет:
Джанет Валейд "PHP для чайников" пример от туда, не очень хорошая книга

Не верно - это мои вчерашние копирайты.
(Добавление)
komprenda можете написать прозрачнее и лучше, так чтобы чайники поняли???
Вперед...
 
 Top
Простой
Отправлено: 01 Февраля, 2015 - 23:33:34
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




[/quote]Какое преимущество классов над функцией.[/quote]
Я тоже новичок, и мне потребовалось около суток разобраться в этом. Чтобы ответить тебе по простому мне пришлось самому ответить на этот вопрос.Давай начнем с простого и закончим сложным:
I. в html можно просто вывести 2+2=4
это просто утверждение без вычислений машиной
II. в php это
казалось бы одно и тоже, но это уже функция вывода и делает она тоже самое.
III. но когда мы напишем следующее:

то мы получили возможность вычислять и подставлять разные значения
IV. увеличиваем сложность
PHP:
скопировать код в буфер обмена
  1. function calculator($a,$b,$operation){
  2.    switch($operation){
  3.         case'+': return ($a+$b);break;
  4.         case'-': return ($a-$b);break;
  5.         case'*': return ($a*$b);break;
  6.         case'/': if($b!=0)return ($a/$b);break;
  7.     }
  8. }
  9. $x=2;
  10. $y=3;
  11. $z='+';
  12. echo calculator($a,$b,$z);
  13.  
этим мы получили возможность выбирать операцию сложения, вычитания, умножения
V. Усложняем дальше
PHP:
скопировать код в буфер обмена
  1.  
  2. class calc{
  3. /*переменная, значение которой ты можешь использовать
  4. внутри какой хочешь функции и также менять значение, перебрасывая из функции в функции, один раз объявив, а обращаться к ней можно $this->result*/
  5.                protected $result;
  6.                 protected function calculator($a,$b,$operation){
  7.                         switch($operation){
  8.                                 case'+': $this->result=($a+$b);break;
  9.                                 case'-': $this->result=($a-$b);break;
  10.                                 case'*': $this->result=($a*$b);break;
  11.                                 case'/': $this->result=($a/$b);break;  
  12.                         }
  13.                 }
  14.                 public function view(){
  15.                         echo $this->result;
  16.                 }
  17.         }
  18. /* а теперь представь - нам нужно модернизировать эту функцию - нам тогда придется ее
  19. переписывать ручками, вникая как она работает. Используя классы можно дописать к
  20. ней кусок кода. Если тебе понадобятся значения переменных, которые находятся внутри
  21. этой функции, то вытаскивай их от туда. в данном случае я просто добавил еще 1 вариант
  22. операций - степень 'n' - в данном случае рассматривается степень нулевая и первая(для упрощения)*/
  23.         class calcmod extends calc{
  24.                 public function calculator($a,$b,$operation){
  25.                         parent::calculator($a,$b,$operation);
  26.                         switch($operation){
  27.                                 case'n': {
  28.                                                 if($b==0)$this->result= 1;
  29.                                                 if($b==1)$this->result= $a;
  30.                                 }break;
  31.                         }
  32.                 }
  33.         }
  34. $x=2;
  35. $y=3;
  36. $z='+';
  37. $f=new calcmod;
  38. $f->calculator($x,$y,$z);
  39. $f->view();
  40.  
на экране появится тоже самое что и в первом примере, НО теперь у нас есть возможность создавать любые виды калькулятора, используя
кусок кода и модернизируя его какими хочешь вариантами. Например нам нужен калькулятор простой, инженерный, простой с функцией степени,
простой с функцией вычисления процентов. Во всех них будет одинаковый кусок кода - это операции, вязанные с сложением, умножением, вычитанием и делением. Вот что бы выделить эту общую часть я использую классы.
Пишите...
 
 Top
DelphinPRO
Отправлено: 02 Февраля, 2015 - 00:53:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




koras пишет:
хочу понять как правильно

Вот как раз тот случай, когда, на мой взгляд, лучше посмотреть видеоурок. На данном этапе (этапе понимания) практическая реализация в коде не особо важна, а вот "живое" объяснение аспектов ООП гораздо лучше усваивается. Как лекция. Можно даже конспект для себя набросать.

Конкретных видеоуроков, к сожалению, не подскажу.
(Добавление)
И, кстати, все эти искусственные примеры на машинках, животных и foo-bar'ах, только засоряют мозг вначале.

==========
Тьфу, блин, некрофилы Улыбка 4-х летнюю тему подняли...

(Отредактировано автором: 02 Февраля, 2015 - 00:57:17)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB