
Опытный
 
Профиль
Группа: Участник
Сообщений: 390
Регистрация: 20.8.2006
Репутация: нет Всего: нет
|
Имеется БД состоящая из трез таблиц, который связаны между собой. Я решил реализовать работу с ним в виде класса, причем отдельный класс описываю отдульную таблицу, и классы связываются по принципы связи таблиц в БД. Вот реаоизация: | Код | <?php // --------------------------------------- news_class START -------------------------------------------------------------// class CPage_news { var $id_pages; var $name_pages; var $parent; var $category_arr = array(); function CPage_news($id_pages, $name_pages, $parent) { $this->id_pages = $id_pages; $this->name_pages = $name_pages; $this->parent = $parent; $querry = sprintf('SELECT * FROM n_category WHERE id_pages=%u ORDER BY id_pages DESC',$id_pages); $querry_result = mysql_query($querry); if(!$querry_result) { echo '<br> Error 4: SELECT from n_category'; exit; } $row_count = mysql_num_rows($querry_result); for($i=0;$i<$row_count;$i++) { $data_from_db = mysql_fetch_array($querry_result); $this->category_arr[$data_from_db[1]] = new CCategory_news($data_from_db[0],$data_from_db[1],$data_from_db[2],&$this); } } // -------------------------------------------------// //----------- Метод добовления категории -----------// // -------------------------------------------------// function add_category($id_pages,$category) { $id_category = $this->last_cat(); $this->category_arr[$id_category] = new CCategory_news($id_pages,$id_category,$category,&$this); } // -------------------------------------------------// //-------Метод поиска последнего id категории-------// // -------------------------------------------------// function last_cat() { $news_arr = $this->parent->news_arr; $last_cat = 0; foreach($news_arr as $page ) { $category_arr = $page->category_arr; foreach ($category_arr as $category ) { $id_category = $category->id_category; if($id_category>$last_cat) $last_cat = $id_category; } } return ++$last_cat; } // -------------------------------------------------// //----------- Метод удаления категории -------------// // -------------------------------------------------// function del_category($id) { if(isset($this->category_arr[$id])) unset($this->category_arr[$id]); } // -------------------------------------------------// //-------- Метод изменения данных категории ---------// // -------------------------------------------------// function update_data_cat($id,$new_name) { $this->category_arr[$id]->category = $new_name; } // -------------------------------------------------// //- Метод проверки на существование именикатегории -// // -------------------------------------------------// function chek_name_cat($name_cat) { foreach($this->parent->news_arr as $news_page) { foreach($news_page->category_arr as $category) { if($category->category===$name_cat) return 0; } } return 1; } // -------------------------------------------------// //----------- Метод сохранения данных в БД ---------// // -------------------------------------------------// function save_data() { if(count($this->category_arr)>0) { $format_string = sprintf('INSERT INTO n_category VALUES'); foreach($this->category_arr as $category) { $format_string = sprintf("%s (%u ,%u ,'%s'),", $format_string, $category->id_pages,$category->id_category,$category->category); $category->save_data(); } $format_string[strlen($format_string)-1] = ';'; $querry_result = mysql_query($format_string); if(!$querry_result) { echo '<br> Error 5: INSERT into n_category'; exit; } } } } class CCategory_news { var $id_pages; var $id_category; var $category; var $parent; var $news_arr = array(); function CCategory_news($id_pages, $id_category, $category, $parent) { $this->id_pages = $id_pages; $this->id_category = $id_category; $this->category = $category; $this->parent = $parent; $querry = sprintf('SELECT * FROM n_news WHERE id_category=%u ORDER BY id_news DESC',$id_category); $querry_result = mysql_query($querry); if(!$querry_result) { echo '<br> Error 6: SELECT from n_news'; exit; } $row_count = mysql_num_rows($querry_result); for($i=0;$i<$row_count;$i++) { $data_from_db = mysql_fetch_array($querry_result); $this->news_arr[$data_from_db[1]] = new CNews($data_from_db[0],$data_from_db[1],$data_from_db[2], $data_from_db[3],$data_from_db[4],$data_from_db[5]); } } // -------------------------------------------------// //-------- Метод подсчета новостей в катеогрии------// // -------------------------------------------------// function get_count_news() { $count = count($this->news_arr); return $count; } // -------------------------------------------------// //--------------- Метод удаление новости ------------// // -------------------------------------------------// function del_news($id) { unset($this->news_arr[$id]); } // -------------------------------------------------// //--------------- Метод добовления новости ----------// // --------------------------------------------------// function add_news($id_category,$head_news,$text_news,$foto_news) { $date_news = date('Y-m-d'); $id_news = $this->last_id(); $this->news_arr[$id_news] = new CNews($id_category,$id_news,$head_news,$text_news,$date_news,$foto_news); } // -------------------------------------------------// //-------Метод поиска последнего id новости --------// // -------------------------------------------------// function last_id() { $last_id = 0; $page_arr = $this->parent->parent->news_arr; foreach($page_arr as $page ) { $category_arr = $page->category_arr; foreach($category_arr as $category) { $news_arr = $category->news_arr; foreach($news_arr as $news) { echo $news->id_news; if($news->id_news>$last_id) $last_id = $news->id_news; } } } return ++$last_id; } // -------------------------------------------------// //------- Метод извлечение данных о новости ---------// // -------------------------------------------------// function get_news($id_news) { if(isset($this->news_arr[$id_news[0]])) return $this->news_arr[$id_news[0]]; } // -------------------------------------------------// //-------- Метод обновления данных новости ----------// // -------------------------------------------------// function update_news($id,$head_news,$text_news, $foto, $date) { $this->news_arr[$id]->head_news = $head_news; $this->news_arr[$id]->text_news = $text_news; $this->news_arr[$id]->date_news = $date; $this->news_arr[$id]->foto_news = $foto; } function save_data() { if(count($this->news_arr)>0) { $format_string = sprintf('INSERT INTO n_news VALUES'); foreach($this->news_arr as $news) { $format_string = sprintf("%s (%u, %u, '%s', '%s', '%s', '%s'),", $format_string, $news->id_category,$news->id_news, $news->head_news, $news->text_news, $news->date_news, $news->foto_news); } $format_string[strlen($format_string)-1] = ';'; $querry_result = mysql_query($format_string); if(!$querry_result) { echo '<br> Error 7: INSERT into n_news'; exit; } } } } class CNews { var $id_category; var $id_news; var $head_news; var $text_news; var $date_news; var $foto_news; function CNews($id_category, $id_news, $head_news, $text_news, $date_news, $foto_news) { $this->id_category = $id_category; $this->id_news = $id_news; $this->head_news = $head_news; $this->text_news = $text_news; $this->date_news = $date_news; $this->foto_news = $foto_news; $this->parent = $parent; } } // --------------------------------------- news_class END -------------------------------------------------------------// /* $admin_class = new CAdmin(); print_r($admin_class->news_arr); $admin_class->news_arr[1]->category_arr[1]->del_news(1); // удаление одной новости $admin_class->news_arr[1]->category_arr[1]->add_news(1,'asddd','dddddd','1.jpg'); // добовление $admin_class->news_arr[1]->category_arr[1]->add_news(1,'asddd','dddddd','1.jpg'); $del_arr= array(1,2); $admin_class->news_arr[1]->category_arr[1]->del_news($del_arr); // удаление нескольких новостей $some_news=$admin_class->news_arr[1]->category_arr[1]->get_news(3); // извлечение данных
$admin_class->news_arr[1]->category_arr[1]->update_news(3,'DimaSiK','Some new TEXT'); // изменение данных echo 'Get'; $admin_class->news_arr[1]->del_category(1); // удаление категории $admin_class->news_arr[1]->add_category(1,'Туцццццццццццццццц'); $admin_class->news_arr[1]->category_arr[2]->add_news(1,'asddd','dddddd','1.jpg'); */ ?>
|
Тесть класс CPage_news описывает первую таблицу БД, класс CPage_news описывает следующую таблицу, которая вложена в таблицу №1 и так далее. Для того, чтобы знать, какие данные имеются в верхней таблице - классе, я пытаюсь передать адрес указателя &$this, вот так - new CCategory_news($id_pages,$id_category,$category, &$this) и так далее до самой последней таблиц. При инициализации самого верхнего класса, я получаю объект, в котором таблицы связана так же как и в БД и это объект содержит все записи БД. Далее объект запихивается в сессию и вот тут начинаются проблемы. Проблемы возникают именно из-за &$this, так как при распечатке данных находящихся в объекте я получаю уйму данных, которые не помещаются в сессию и все из-за &$this. Как мне обойти это и знать о том, что происходит в самом верху объекта находясь при этом с низу?
--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.
|