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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
BMW M6
Отправлено: 18 Февраля, 2014 - 17:08:06
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2013  


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




Все привет. Вот озадачился вопросом, а всё ли я правильно пишу?
Пример класса для работы с новостями:
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.  

Жду критику, чтобы исправить ошибки.
 
 Top
esterio
Отправлено: 18 Февраля, 2014 - 17:11:11
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




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;
}

почему сразу не возвращать результат, а заносить в свойство класса которое не принимает никакого участвия
 
 Top
BMW M6
Отправлено: 18 Февраля, 2014 - 17:14:02
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2013  


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




[quote=esterio][/quote]
1. Учту.
2. Честно говоря, только что я это удалил. Понял что это не нужно, но на будущее учту!
 
 Top
kilowat
Отправлено: 18 Февраля, 2014 - 18:34:05
Post Id


Новичок


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


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




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.  

Советую погуглить очень интересная штука...

(Отредактировано автором: 18 Февраля, 2014 - 18:34:30)

 
 Top
khlystou
Отправлено: 20 Марта, 2014 - 22:28:42
Post Id


Новичок


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


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




Привет форумчане! Хочу написать 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.  


Хотел бы услышать про все дыры и варианты их исправления!
 
 Top
SAD
Отправлено: 20 Марта, 2014 - 22:38:07
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




khlystou, молодой человек, зачем Вы залезли в чужую тему?
 
 Top
khlystou
Отправлено: 20 Марта, 2014 - 22:47:02
Post Id


Новичок


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


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




SAD пишет:
khlystou, молодой человек, зачем Вы залезли в чужую тему?

..мне очень нужно мнение специалистов! помогите плиз!
 
 Top
caballero
Отправлено: 21 Марта, 2014 - 00:47:16
Post Id


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


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


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




Цитата:
Хотел бы услышать про все дыры и варианты их исправления!

здесь все сплошная дыра посему вариант исправления только один - фтопку


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Edwvee
Отправлено: 21 Марта, 2014 - 14:10:35
Post Id


Частый гость


Покинул форум
Сообщений всего: 195
Дата рег-ции: Июнь 2013  


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




Зачем в php писать хэдер на утф8? В шаблоне в хэде никак?

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

(Отредактировано автором: 21 Марта, 2014 - 14:12:58)

 
 Top
Мелкий Супермодератор
Отправлено: 21 Марта, 2014 - 14:17:51
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Edwvee пишет:
зачем-то exit, когда уже произошло перенаправление:

А вы полюбопытствуйте, что происходит после header
Спойлер (Отобразить)


-----
PostgreSQL DBA
 
 Top
armancho7777777 Супермодератор
Отправлено: 21 Марта, 2014 - 14:19:38
Post Id



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


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


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




BMW M6 пишет:
Правильно ли я пишу код ООП?

ООП - это образ мышления.
Оно не "осязаемо".
Умение мыслить объектно ориентированно приходит с опытом.
 
 Top
esterio
Отправлено: 21 Марта, 2014 - 14:38:30
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Edwvee пишет:
Зачем в php писать хэдер на утф8? В шаблоне в хэде никак?

Потому что браузер в последнюю очередь обращает внимание на meta тег. для него приоритетней header
 
 Top
khlystou
Отправлено: 21 Марта, 2014 - 16:10:56
Post Id


Новичок


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


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




Форумчане, так можно меня натолкнуть на путь истинный с моим кодом?
 
 Top
IllusionMH
Отправлено: 21 Марта, 2014 - 16:21:59
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




khlystou, для начала создайте свою тему, а не лезьте в чужие.
 
 Top
teddy
Отправлено: 21 Марта, 2014 - 16:48:30
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


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




khlystou пишет:
Форумчане, так можно меня натолкнуть на путь истинный с моим кодом?

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

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

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

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

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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB