Вопрос по ООП в ПХП

micr0b

Новичок
Вопрос по ООП в ПХП

Привет.. выложу некий код написан мной!
Изучаю ООП в ПХП!
И решил переделать свои заготовки кода с ООП.

Хотелось бы узнать верно ли написан класс Новости или бред и нужно переделать!
В коде есть несколько комментариев , в которых есть вопросы.
Если вам не составит труда можно бы было получить на них ответ.

index.php
PHP:
<a href="/news_oop/index.php?page=index">Головна</a>
<a href="/news_oop/index.php?page=news">Новини</a>
<?PHP

switch ($_GET['page']){
	case "index":
		include "page/index.php";
	break;

	case "news":
		require_once "class/class_News.php";
		$obj_News = new NewsModules();
	break;

	default:
		@include "404.php";
	break;
}
?>
class_News.php
PHP:
<?php
include "../config.php";
class NewsModules{
	/* ВОПРОС1 // - Что нам это дает? Объявление свойств переменных если можно в даном примере обойтись и без них!
	public $idnews;
	public $author = "lol";
	public $title;
	public $opusMin;
	public $opusMax;
	public $picture;
	public $date;
	public $category;
	public $active; */
	
/* КОНСТРУКТОР (метод автозапуску певних дій при завантаженні класу) */
	function __construct($html_title="Адмінка новин"){
	/*echo "<br><b>Запущений конструктор</b><br>";*/
		$this->html_title=$html_title;
		
	/* Menu News */
		// ВОПРОС2 - Возможно уместно код реализовывать в отдельном классе или функции или как?
		echo "<hr>";
		echo "<a href='/news_oop/index.php?page=news&amp;do=add'>Додати</a>&nbsp;";
		echo "<a href='/news_oop/index.php?page=news&amp;do=output'>Перегляд</a>&nbsp;";
		echo "<s><a href='/news_oop/index.php?page=news&amp;do='>Категорії новин</a></s>&nbsp;";
		echo "<s><a href='/news_oop/index.php?page=news&amp;do='>Прислані новини</a></s> <s><a href='/'>(0)</a></s>";
		switch ($_GET['do']){
			// Додати новину
			case "add":echo $this->inputNews()."<br>";break;
			// Редагувати новину
			case "edit":echo $this->editNews()."<br>";break;
			// Редагувати новину
			
			// Перегляд новин
			default:echo $this->outputNews();break;
		}
	}
/* ДЕСТРУКТОР (метод автозакриття певних дій при завантаженні класу) */
	function __destruct(){/* echo "<br><b>Запущений деструктор</b><br>"; */}
	
/* Додавання новин */	
	function inputNews(){
		echo "<br><br>";
		echo "<input type='text' name='category' value=''><br>";
		echo "<img src='".$this->picture = $row["picture"]."' width='50' height='50'><br>";
		echo "<input type='text' name='' value=''><br>";
		echo "<input type='text' name='' value=''><br>";
		echo "<input type='text' name='' value=''><br>";
		echo "<input type='text' name='' value=''><br>";
		echo "<input type='text' name='' value=''><br>";
		echo "<s><input type='submit' value='Додати'></s>";
	}

/* Редагування новини */
	// ВОПРОС3  - Возможно лутше реализовать запросы в отдельную функцию или класс и как это корректно проработать
	// ВОПРОС4 - Стоит ли в коде использовать например: $ this-> title = $ row ["title"] может лучше просто $ row ["title"]?
	function editNews(){
		$query = mysql_query("SELECT * FROM `qlitenews` WHERE `idnews`='".$_GET['idnews']."'");
		$row = @mysql_fetch_array($query);
		echo "<br><br>";
		echo "ID: ".$this->idnews = $row["idnews"]."<br>";
		echo "<input type='text' name='category' value='".$this->category = $row["category"]."'><br>";
		echo "<img src='".$this->picture = $row["picture"]."' width='50' height='50'><br>";
		echo "<input type='text' name='' value='".$this->title = $row["title"]."'><br>";
		echo "<input type='text' name='' value='".$this->opusMin = $row["opusMin"]."'><br>";
		echo "<input type='text' name='' value='".$this->opusMax = $row["opusMax"]."'><br>";
		echo "<input type='text' name='' value='".$this->author = $row["author"]."'><br>";
		echo "<input type='text' name='' value='".$this->date = $row["date"]."'><br>";
		echo "<s>Категорія: <select><option value='all'>all</option><option value='city'>city</option></select></s><br>";
		echo "<s><input type='submit' value='Перенести в чернетку'></s> ";
		echo "<s><input type='submit' value='Видалити'></s> ";
		echo "<s><input type='submit' value='Змінити'></s> ";
	}

/* Вивід новин */		
	function outputNews(){
		/* Сортування та вивід сторінок { */
		// ВОПРОС5 - Можно "Сортировка и вывод страниц" всунуть в конструктор или класс или функцию для удобного же использование?
		$pag = trim($_REQUEST["page_news"]);
		if(!is_numeric($pag)) $page = 1;
		$multed = $pag*3;
		$query = mysql_query("SELECT count(idnews) AS idnewscount FROM `qlitenews` WHERE `active`='1'");//кількість сторінок
		$mymas = mysql_fetch_array($query);
		/* Сотруєм  по сторінках, виводим сторінки }{ */
			$query = mysql_query("SELECT * FROM `qlitenews` WHERE `active`='1' ORDER BY `idnews` DESC LIMIT ".$multed.", 3");
			while($row = @mysql_fetch_array($query)){
			echo "<pre>";
			echo "<a href='/news_oop/index.php?page=news&amp;do=edit&amp;idnews=".$row["idnews"]."'>Редагувати</a> ";
			echo "<s><input type='submit' value='Перенести в чернетку'></s> ";
			echo "<s><input type='submit' value='Видалити'></s> <br>";
			echo "ID: ".$this->idnews = $row["idnews"]."<br>";
			echo "category: ".$this->category = $row["category"]."<br>";
			echo "picture: <img src='".$this->picture = $row["picture"]."' width='50' height='50'><br>";
			echo "title: ".$this->title = $row["title"]."<br>";
			echo "opusMin: ".$this->opusMin = $row["opusMin"]."<br>";
			echo "<s>opusMax: ".$this->opusMax = $row["opusMax"]."</s><br>";
			echo "Author: ".$this->author = $row["author"]."<br>";
			echo "date: ".$this->date = $row["date"]."<br>";
	
			/* показує кількість */
			// В РОЗРОБОТЦІ			
			$query_guestbook_count = mysql_query("SELECT count(idguestbook) AS guestbook_count FROM `guestbook` WHERE `idnews`='".$row["idnews"]."'");
			$roww = mysql_fetch_array($query_guestbook_count);		
			echo "<s>Коментарів (".$roww['guestbook_count'].")<a href='?page=comentar&amp;idnews=".$row["idnews"]."'>Детальніше...»</a></s>";
			
			echo "</pre>";
			}
		/* Сортування та вивід сторінок }{ */
		echo "<center>Сторінка:&nbsp;";
		$generate_some_pgs = ceil($mymas[0]/3);
		for($i=0; $i<$generate_some_pgs; $i++)
		echo "<b><a href='index.php?page=news&amp;do=output&amp;page_news=".($i)."'>".($i+1)."</a>&nbsp;</b>";
		echo "</center>";
		/* Сортування та вивід сторінок }*/
	}
}
?>
Искренне спасибо!
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Это не ООП.

-~{}~ 12.07.10 20:07:

Вовсе не объектный синтаксис делает код объектно-ориентированным.
 

A1x

Новичок
как бы вежливость препятствует писать какие-то комменты к этому коду

для начала попробуйте отделить данные от представления, т.е. сделать так чтобы в классе новостей не было никаких намеков на вывод ХТМЛ (особенно в конструкторе ...АААААА!!!)

выводом ХТМЛ должны заниматься другие классы
Класс новостей должен подготовить данные и передать их классам которые отвечают за ХТМЛ

ООП просто лучше позволяет реализовать принцип "разделяй и властвуй"
а ваш спагетти-код к этому не имеет никакого отношения
 

micr0b

Новичок
можно пожалуста получить ответ как правильно сорудить код ООП)) и ответы на вопросы.. глупо ..читаю книги .. но както саму суть немогу уловить... имено суть написания кода ..
Я понял о чем идет твоя речь!
Извиняюсь за чайниство)
 

Духовность™

Продвинутый новичок
можно пожалуста получить ответ как правильно сорудить код ООП))
забудь об ООП на 2-3 года и начни изучать тему шаблонизации - научись писать код программы отдельно от HTML.
http://phpfaq.ru/tpl
если очень коротко, то любое приложение на PHP состоит из 2 концептуальных кодов: код логики приложения (связь с БД, вычисления, подключения и т.д.) и код логики представления, код, отвечающий за вывод HTML кода.
Правило таково - нельзя мешать (как ты сделал) логику приложения и логику представления. Если пока не понимаешь почему - воспринимай это как догму, потом поймешь.

Когда начнешь изучать шаблонизацию, на просторах интернета встретишь слово шаблонизатор, и утверждение, что нужно "отделять PHP от HTML". Не верь этому. Просто отделяй код программы, генерирующей данные, от кода вывода HTML.
 

A1x

Новичок
можно пожалуста получить ответ как правильно сорудить код ООП)) и ответы на вопросы.. глупо ..читаю книги .. но както саму суть немогу уловить... имено суть написания кода
еще можно учиться ковыряя чужой но _качественный_ код.

Если охота выучить ООП - скачай ZF, создай на нем приложение для своих новостей с контроллерами, view, etc. (как это сделать там написано в документации достаточно подробно)
Уверен, это добавит понимания по любому и кода такого как в первом посте уже писать не захочется
 

micr0b

Новичок
спасибо!
Многому просветили!
Хотелось бы отметить статтю "MVC для начинающих": http://chtivo.webhost.ru/articles/mvc.php
Если чесно тяжелопереосмыслить даною новую информ., наверное на это должно пойти приличное время!
 

A1x

Новичок
кроме MVC есть еще много других шаблонов проектирования еще называемых паттернами ООП, про них тоже стоит почитать
 

FB3

Новичок
А еще про инверсию зависимостей...
И про делегирование в предпочтение наследованию...
И еще много всего, я еще сам не все знаю :)
 

Viktor_Rez

Новичок
Это только модель программирования, ни каким образом твоя задача не нарушает ООП. Дальше вступает в игру MVC - но это совершенно другая концепция.
 
Сверху