Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP OOP требуется помощь

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

uniqq

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
С PHP начал разбираться недавно, до этого немного программировал на С++. Столкнулся с следующей ситуацией:
для загрузки объектов из бд я использую стандартное решение mapper. Часто возникает ситуация когда на одной странице мне требуется отображать только какую-то часть полей объекта, например имя, а на других страницах мне нужно отображать все поля объекта, например имя, фото ну итд.. Как известно маппер всегда загружает объект полностью и появляется некоторая избыточность в первом случае (из базы тянется вся информация об объекте, хотя нужно только имя). Как такую проблему решать в таком языке как PHP? Или просто забить?

Всего записей: 2 | Зарегистр. 12-03-2011 | Отправлено: 00:05 13-03-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
uniqq

Цитата:
Как такую проблему решать в таком языке как PHP?

ну, в общем то, в php лучше делать все руками, а не пользоваться какими то мапперами
это не особенность языка, это особенность той вещи, которой пользуетесь.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:14 13-03-2011
uniqq

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну я маппер тоже руками написал можно абстрагироваться  от него. Допустим есть большой объект для загрузки которого нужно поджойнить несколько таблиц. Есть вариант загружать объект полностью всегда, даже когда нужно какое-то одно поле, либо делать что-то наподобие отложенной загрузки полей и подгружать их при запросе. Но в таком случае если мне понадобиться вывести 3 поля нужно делать либо 3 запроса (при отложенной загрузке) либо опять таки тянуть объект полностью. Пытаюсь найти наиболее элегантный компромисс.. Пока загружаю полностью всегда

Всего записей: 2 | Зарегистр. 12-03-2011 | Отправлено: 00:22 13-03-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
uniqq

Цитата:
Пока загружаю полностью всегда

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

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:04 13-03-2011
LukaBtbb



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если объект тащить частями, "тут играем, тут не играем, тут рыбу заворачивали" - это уже не ООП, имхо.
Если возникли проблемы с производительность, можно попробовать разбить объект на составные объекты или пойти другим путем, перейти на более производительную БД или железо.

Всего записей: 126 | Зарегистр. 26-10-2005 | Отправлено: 21:15 13-03-2011
ViM



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А что мешает написать несколько методов, под каждую задачу свой или использовать соответствующие параметры вызова, в зависимости от значений которых и будет формироваться результат?

Всего записей: 6 | Зарегистр. 30-12-2002 | Отправлено: 15:37 23-03-2011 | Исправлено: ViM, 15:41 23-03-2011
Karabas_il

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ , нужна подсказка.
Начал изучать классы, но упёрся в непонимание - почему не работает мой пример :
 
Внутри цикла создаю кучу обьектов класса.
Тут-же проверяю их существование  - Ок.
 
            $obj=$Obj_{$field};
            $obj=new FieldsClass;
            $obj->name=$field;
            $obj->type_db=$type;
            $obj->size_db=$size;
            echo " ============== $field <br>";
            echo "0 === $obj->name === $obj->type_db === $obj->size_db === ok<br>";
 
По завершению цикла, тут-же, запускаю другой и пытаюсь вывести их вновь - не выводит.
 
    echo " ============== $field <br>";
    $obj=$Obj_{$field};
    echo "1 === $obj->name === $obj->type_db === $obj->size_db === ok<br>";
 
Как будто их нет - почему не могу понять.

Всего записей: 45 | Зарегистр. 04-05-2006 | Отправлено: 14:56 28-12-2013 | Исправлено: Karabas_il, 15:21 28-12-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Karabas_il
Ну, создаете, а как сохраняете в массив или куда то ещё? Больше кода покажите - оба цикла и что между ними.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 16:24 28-12-2013
Karabas_il

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну..... ногами не пинайте,я только начинаю....
Зачем сохранять куда-то ? Это-же один скрипт....
Между циклами нет ничего .....
И можно на ты, как везде принято ...
----------------------------------------------------------------
class FieldsClass {  
public $name;
public $size_db;
public $type_db;
}
####################### цикл 1
    foreach($tables_on_db as $key=>$table){
    $result=mysql_func("SHOW FIELDS FROM $table ;");
        while ($line = mysql_fetch_array($result, MYSQL_NUM)) {
            $field=$line[0];
            list($type, $size, $xxx) = split('[()]', $line[1]);
            ### создание массива имён столбцов: $fields_list[]=имя столбца
            if (in_array($field, $fields_list)) {     }
            else{  ###
            $fields_list[] = $field;  ### добавление в массив списка столбцов таблиц
            $obj=$Obj_{$field};  
            $obj=new FieldsClass;     ### создание обьекта класса FieldsClass
            $obj->name=$field;
            $obj->type_db=$type;
            $obj->size_db=$size;
            echo " 0 ============== $field <br>";
            echo " 0 === $obj->name === $obj->type_db === $obj->size_db === ok<br>";
            } ###  
        }  
    }
############################ цикл 2
foreach ($fields_list as $key=>$field) {  
    $obj=$Obj_{$field};
    echo " 1 ============== $field <br>";
    echo " 1 === $obj->name === $obj->type_db === $obj->size_db === ok<br>";
}
-----------------------------------------------------------------
 
Пробовал вывести вручную ( 'password' = одно из значений $field в цикле )
echo " 1 === $Obj_password->name === $Obj_password->type_db === $Obj_password->size_db === ok<br>";
Тоже пустота.

Всего записей: 45 | Зарегистр. 04-05-2006 | Отправлено: 16:42 28-12-2013 | Исправлено: Karabas_il, 16:57 28-12-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что такое $Obj_{$field}?
Вы создание $obj, но не сохраняете его, после цикла доступна только последняя его версия, и то по $obj

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 16:53 28-12-2013
Karabas_il

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я видимо чего-то базового не понимаю.....
Я пытаюсь создать обьекты класса FieldsClass  
Обьекты - будут описывать столбцы таблиц в БД с их параметрами (имя, тип, размер...будут ещё, я просто пока упростил, что-б понять как работают классы).
Столбцов много, по этому обьекты создаются в цикле и там-же обьектам даются имена.
Я понял, что где-то здесь беда $obj=$Obj_{$field};
Но как менять имя создаваемого обьекта не могу придумать ....
....
Или нужно как-то иначе ?
Создать обьект и сохранить его в массиве ?
Типа : $Obj_Field[$field] = $obj;  ????
....
Да ! Точно! Работает !
Спасибо дошло....
 
Выводить так : echo $Obj_Field[$field]->name ;

Всего записей: 45 | Зарегистр. 04-05-2006 | Отправлено: 17:03 28-12-2013 | Исправлено: Karabas_il, 17:32 28-12-2013
vs6262



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PHP
 
кто знает как в string правильно посчитать количество "\n", или количество строчек ?
 
= mb_substr_count($text , '\n'); - не работает

Всего записей: 2188 | Зарегистр. 25-02-2013 | Отправлено: 15:45 18-04-2015 | Исправлено: vs6262, 15:58 18-04-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vs6262

Цитата:
'\n'

'\n' и "\n" - не одно и то же.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 19:45 18-04-2015
vs6262



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
спасибо
 
PHP
у меня еще вопрос: можно ли в PDF файле (текстовом не картинка) подсчитать количество букв и слов ?
 
PS: желательно чтобы в самом начале происходило распознавание об документ текстовый или графический

Всего записей: 2188 | Зарегистр. 25-02-2013 | Отправлено: 16:59 24-04-2015 | Исправлено: vs6262, 18:25 24-04-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vs6262

Цитата:
у меня еще вопрос: можно ли в PDF файле (текстовом не картинка) подсчитать количество букв и слов ?  

ооп? да и не задача это для php - воспользуйтесь утилитами из http://www.foolabs.com/xpdf/home.html , к примеру

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 20:18 24-04-2015
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP OOP требуется помощь


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru