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 » » Объектно-ориентированное программирование » Правильно ли я пишу код ООП?

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

1. BMW M6 - 18 Февраля, 2014 - 17:08:06 - перейти к сообщению
Все привет. Вот озадачился вопросом, а всё ли я правильно пишу?
Пример класса для работы с новостями:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.         class News
  4.         {
  5.                 private $sql;
  6.                 private $number;
  7.                 private $id;
  8.                 private $news_page;
  9.                 private $page_number;
  10.                 private $query;
  11.                 private $quantity_news;
  12.                 private $firs_news_page;
  13.                 private $quantity_page;
  14.                 public $data_news;
  15.  
  16.                 function __construct()
  17.                 {
  18.                         $this->sql = new SafeMySQL();
  19.                 }
  20.  
  21.                 public function News_All()
  22.                 {
  23.                         $this->data_news = $this->sql->getAll("SELECT * FROM news WHERE category=1 ORDER BY id DESC");
  24.                         return $this->data_news;
  25.                 }
  26.  
  27.                 public function News_Index($number)
  28.                 {
  29.                         (int)$this->number = $number;
  30.                         $this->data_news = $this->sql->getAll("SELECT * FROM news WHERE category=1 ORDER BY id DESC LIMIT ?i",$this->number);
  31.                         return $this->data_news;
  32.                 }
  33.  
  34.                 public function News_View($id)
  35.                 {
  36.                         (int)$this->id = $id;
  37.  
  38.                         if(!preg_match("/^\d+$/",$this->id))
  39.                         {
  40.                                 Error::add('Ошибка в запросе!');
  41.                                 return false;
  42.                                 exit();
  43.                         }
  44.                         else
  45.                         {
  46.                                 $this->data_news = $this->sql->getRow("SELECT * FROM news WHERE category=1 AND id=?i LIMIT 1",$this->id);
  47.                                 if($this->data_news == true)
  48.                                 {
  49.                                         return $this->data_news;
  50.                                 }
  51.                                 else
  52.                                 {
  53.                                         Error::add('Данная новость ещё не была создана!');
  54.                                         return false;
  55.                                         exit();
  56.                                 }
  57.                         }
  58.                 }
  59.  
  60.                 public function News_Page($news_page, $page_number)
  61.                 {
  62.                         (int)$this->news_page = $news_page;
  63.                         (int)$this->page_number = $page_number;
  64.  
  65.                         if(!preg_match("/^\d+$/",$this->page_number))
  66.                         {
  67.                                 Error::add('Ошибка в запросе!');
  68.                                 return false;
  69.                                 exit();
  70.                         }
  71.  
  72.                         $this->query = $this->sql->getRow("SELECT * FROM news WHERE category=1 LIMIT 1");
  73.                         $this->quantity_news = count($this->query);
  74.                         if ($this->quantity_news < $this->news_page)
  75.                         {
  76.                                 return false;
  77.                         }
  78.  
  79.                         $this->quantity_page = (int)($this->quantity_news / $this->news_page);
  80.                         if (($this->quantity_news % $this->news_page) != 0)
  81.                         {
  82.                                 $this->quantity_page++;
  83.                         }
  84.                         $this->firs_news_page = ($this->page_number -1)* $this->news_page;
  85.                         $this->data_news = $this->sql->getAll("SELECT * FROM news WHERE category=1 ORDER BY id DESC LIMIT ?i,?i",$this->firs_news_page, $this->news_page);
  86.                         if($this->data_news == true)
  87.                         {
  88.                                 return $this->data_news;
  89.                         }
  90.                         else
  91.                         {
  92.                                 Error::add('Данная страница не существует!');
  93.                                 return false;
  94.                                 exit();
  95.                         }
  96.                 }
  97.         }
  98. ?>
  99.  

Жду критику, чтобы исправить ошибки.
2. esterio - 18 Февраля, 2014 - 17:11:11 - перейти к сообщению
BMW M6 пишет:
$this->sql = new SafeMySQL();

Ну здесь я более чем уверен будет происходить каждый раз коннект. Здесь лучше использовать Registry или Singleton
BMW M6 пишет:
public function News_All()
{
$this->data_news = $this->sql->getAll("SELECT * FROM news WHERE category=1 ORDER BY id DESC");
return $this->data_news;
}

почему сразу не возвращать результат, а заносить в свойство класса которое не принимает никакого участвия
3. BMW M6 - 18 Февраля, 2014 - 17:14:02 - перейти к сообщению
[quote=esterio][/quote]
1. Учту.
2. Честно говоря, только что я это удалил. Понял что это не нужно, но на будущее учту!
4. kilowat - 18 Февраля, 2014 - 18:34:05 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2.  function __construct()
  3.                 {
  4.                         $this->sql = new SafeMySQL();
  5.                 }
  6. Здесь лучше в конструктор кидать уже объект, созданый вне класса и ставить тайп хинтинг, это называется    умным словом Депендеси Инъекшн
  7.  
  8.  function __construct(SafeMySQL $obj)
  9.                 {
  10.                         $this->sql = $obj;
  11.                 }
  12.  

Советую погуглить очень интересная штука...
5. khlystou - 20 Марта, 2014 - 22:28:42 - перейти к сообщению
Привет форумчане! Хочу написать CMS-ку для своего блога! Все продумал.. У неё будет абстрактный класс ядра, (он же шаблонизатор), а вся динамическая часть будет храниться в классах наследниках.. Путем проб и ошибок накарякал вот такой индексный файл:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP session_start(); // стартуем сессии
  3.         header("Content-Type:text/html; charset=UTF-8"); // выводим заголовок
  4.         require_once("function/function.php"); // подключаем файл функций
  5.        
  6.         if(!file_exists("inc/config.php")) { // наличие файла конфигураций
  7.                 header("Location:/install.php"); // установка системы
  8.                 exit();
  9.         } else {
  10.                 require_once("inc/config.php"); // подключаем файл конфигураций
  11.                 require_once("classes/core.php"); // подключаем абстрактный класс ядра сайта
  12.                
  13.                 if($_GET['action']) { // выбираем класс-наследник
  14.                         $class = trim(strip_tags($_GET['action']));
  15.                 } else {
  16.                         $class = "main";
  17.                 }
  18.                
  19.                 if(file_exists("classes/".$class.".php")) { // проверка наличия файла с классом
  20.                         include("classes/".$class.".php"); // подключаем файл с классом-наследником
  21.                         if(class_exists($class)) { // проверяем наличие класса в файле
  22.                                 $obj = new $class; // формируем новый класс
  23.                                 $obj->getBody(); // обращаемся к основному методу
  24.                         } else {
  25.                                 exit("no class");
  26.                         }
  27.                 } else {
  28.                         exit("no file");
  29.                 }
  30.         }
  31.  


Хотел бы услышать про все дыры и варианты их исправления!
6. SAD - 20 Марта, 2014 - 22:38:07 - перейти к сообщению
khlystou, молодой человек, зачем Вы залезли в чужую тему?
7. khlystou - 20 Марта, 2014 - 22:47:02 - перейти к сообщению
SAD пишет:
khlystou, молодой человек, зачем Вы залезли в чужую тему?

..мне очень нужно мнение специалистов! помогите плиз!
8. caballero - 21 Марта, 2014 - 00:47:16 - перейти к сообщению
Цитата:
Хотел бы услышать про все дыры и варианты их исправления!

здесь все сплошная дыра посему вариант исправления только один - фтопку
9. Edwvee - 21 Марта, 2014 - 14:10:35 - перейти к сообщению
Зачем в php писать хэдер на утф8? В шаблоне в хэде никак?

Каждый раз эта лишняя, кроме единственного раза, проверка и зачем-то exit, когда уже произошло перенаправление:
PHP:
скопировать код в буфер обмена
  1.  if(!file_exists("inc/config.php")) { // наличие файла конфигураций
  2.                 header("Location:/install.php"); // установка системы
  3.                 exit();
10. Мелкий - 21 Марта, 2014 - 14:17:51 - перейти к сообщению
Edwvee пишет:
зачем-то exit, когда уже произошло перенаправление:

А вы полюбопытствуйте, что происходит после header
Спойлер (Отобразить)
11. armancho7777777 - 21 Марта, 2014 - 14:19:38 - перейти к сообщению
BMW M6 пишет:
Правильно ли я пишу код ООП?

ООП - это образ мышления.
Оно не "осязаемо".
Умение мыслить объектно ориентированно приходит с опытом.
12. esterio - 21 Марта, 2014 - 14:38:30 - перейти к сообщению
Edwvee пишет:
Зачем в php писать хэдер на утф8? В шаблоне в хэде никак?

Потому что браузер в последнюю очередь обращает внимание на meta тег. для него приоритетней header
13. khlystou - 21 Марта, 2014 - 16:10:56 - перейти к сообщению
Форумчане, так можно меня натолкнуть на путь истинный с моим кодом?
14. IllusionMH - 21 Марта, 2014 - 16:21:59 - перейти к сообщению
khlystou, для начала создайте свою тему, а не лезьте в чужие.
15. teddy - 21 Марта, 2014 - 16:48:30 - перейти к сообщению
khlystou пишет:
Форумчане, так можно меня натолкнуть на путь истинный с моим кодом?

Что тут скажешь... Ваш вопрос заключается в построении архитектуры. Такие вопросы не решаются парой ответов на форуме особенно если неизвестен функционал приложения.

Это нужно сидеть, думать, как делать лучше в зависимости от ситуации. Обычно на продумывание все того что нужно сделать уходит больше времени чем на сам кодинг.

В блоге может быть много чего а может почти ничего и не быть. Более того, у Вас нет конкретного вопроса, все выглядит как то неоднозначно.

А по поводу пути, то Вам скорее всего надо прежде определиться с тем какие у Вас проблемы, а потом уже задавать вопросы которые Вас интересуют для решения этих проблем. Если Вы не можете понять что именно Вас интересует, то вряд ли это сможет сделать кто то другой на этом форуме.

Растерялся

 

Powered by ExBB FM 1.0 RC1