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
Форумы портала PHP.SU :: Версия для печати :: Мой первый скрипт ООП
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Мой первый скрипт ООП

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

1. snikers987 - 13 Сентября, 2011 - 22:49:09 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. class Squre {
  4. var $a;
  5. var $b;
  6. var $r;
  7. var $s;
  8. var $pi;
  9. function Skvadrat($a, $b) {
  10.         $this->s = $a*$b;
  11.         echo "Площадь: ".$this->s ." м2.";
  12.         }
  13. function Skrug($pi, $r) {
  14.         $this->s = $pi*($r*$r);
  15.         echo "Площадь: ".$this->s ." м2.";
  16.         }
  17.        
  18. }
  19. echo "<form method='post'>";
  20. echo "Квадрат: <input type='radio' name='type' value='1'><br>";
  21. echo "Круг: <input type='radio' name='type' value='2'><br>";
  22. echo "Радиус или сторона А: <input type='text' value='' name='a'><br>";
  23. echo "Сторона Б: <input type='text' value='' name='b'><br>";
  24. echo "<input type='submit' name='enter' value='Посчитать'>";
  25. echo "</form>";
  26. if(isset($_POST['enter'])){
  27. $a=$r=$_POST['a'];
  28. $b=$_POST['b'];
  29. $pi=pi();
  30. $pi=round($pi, 2);
  31. $type=$_POST['type'];
  32.  
  33. switch($type)
  34. {
  35. case 1:
  36.         $s = new Squre;
  37.         $s->Skvadrat($a, $b);
  38.         break;
  39. case 2:
  40.         $s = new Squre;
  41.         $s->Skrug($pi, $r);
  42.         break;
  43. default :
  44.         echo "Не указан тип геометрической фигуры!";
  45. }
  46.  
  47. echo "<br/>Число Пи = ".$pi;
  48. }
  49. ?>
  50.  


Собственно этот скрипт находит площадь круга или прямоугольника, нужна критика именно с точки зрения ООП. Спасибо.
2. DeepVarvar - 13 Сентября, 2011 - 23:03:52 - перейти к сообщению
snikers987 пишет:
#
var $a;
var $b;
var $r;
var $s;
var $pi;

Некоторые св-ва лишние
(Добавление)
Наверное даже все кроме $s
3. DlTA - 14 Сентября, 2011 - 00:10:55 - перейти к сообщению
они там все лишние,
непонятно зачем делать $s->Skrug($pi, $r);
если можно сделать $s->Skrug( $r);
и echo "Площадь: ".(pi()*($r*$r)) ." м2.";
4. White - 14 Сентября, 2011 - 08:26:49 - перейти к сообщению
говорят кстати что с 6 версии пхп var $s; вызовет ошибку. используйте private $s или public $s
5. Stierus - 14 Сентября, 2011 - 14:50:06 - перейти к сообщению
С точки зрения ООП у вас должно быть 2 класса - квадрат и круг, у которых были бы свои свойства (радиус и длина стороны) и методы (найти площадь, пересечение и тд)

PHP:
скопировать код в буфер обмена
  1. class circle{
  2.         private $pi = 3.14; //мало ли для чего вы его передаете в качестве аргумента
  3.         public $radius = 0;
  4.         public function __construct($radius=0){
  5.                 $this->radius = $radius;
  6.         }
  7.         public function getArea(){
  8.                 return $this->radius * $this->radius * $this->pi;
  9.         }
  10. }
  11.  
  12. class square{ ... }
  13.  
  14. $circle = new circle(10);
  15. echo $circle->getArea();


ЗЫ
У квадрата все стороны равны
6. EuGen - 14 Сентября, 2011 - 15:50:05 - перейти к сообщению
Да и число PI я бы не стал хранить даже в качестве приватного свойства класса.
Константа все-таки.
Или можно себе представить случай, когда оно равно другому числу?
7. Stierus - 15 Сентября, 2011 - 12:23:07 - перейти к сообщению
EuGen, смотри комментарий Улыбка ... вдруг ему нужно разную точность числа пи или еще чего - чужая душа потемки
(Добавление)
http://ru.php.net/manual/en/function.pi.php
8. EuGen - 15 Сентября, 2011 - 12:26:21 - перейти к сообщению
Stierus пишет:
разную точность числа пи

Тогда я бы round использовал.

Хотя да - какой-то умник уже объявлял число pi равное 4
9. caballero - 15 Сентября, 2011 - 23:03:22 - перейти к сообщению
Цитата:
нужна критика именно с точки зрения ООП


Там вообще нет ООП. Наличие ключевого слова class еще не делает программу объектно -ориентированной. В частности здесь вообще нет осмысленного объекта кроме двух функций реализованных как методы ничего не означащего класса
10. Slavenin - 16 Сентября, 2011 - 22:44:03 - перейти к сообщению
без лишнего кода общий принцип.
1) максимальная абстракция. Абстрактный класс "фигура" к нему интерфейс с описанием методов (например получение периметра и площади).
2) конкретизирующие классы наследующие класс "фигура" например "квадрат" и круг по своему реализующие абстрактные методы

начните с этого, почитайте про наследование, полиморфизм в ООП

 

Powered by ExBB FM 1.0 RC1