[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Можно ли создать класс?
paa66
Почитал про классы в PHP, показалось, что ничего сложного в этом нет и появилось желание сократить код за счёт создания класса, но есть сомнения в возможности реализации через класс. Итак, у меня много запросов к БД. Они разные по синтаксису. Например :
SELECT * FROM #__a_goods WHERE goods LIKE '%".$_POST[search]."%'
и
SELECT * FROM #__a_goods WHERE goods_id=$goods_id ORDER BY $field $d
Т.е. два запроса обращаются к одной БД и к одной таблице, но синтаксис отличается. Во втором приведённом мной запросе после WHERE есть критерий отбора $goods_id. Я опасаюсь следующего: создам класс с синтаксисом типа
SELECT $fields FROM $table WHERE $field=$criteria ORDER BY $order $desc
но в случае использования первого приведённого мной запроса после WHERE $criteria, которую использую в качестве критерия отбора, будет равна null и тогда результатом запроса тоже будет null. Что скажете?



Спустя 5 минут, 43 секунды (8.02.2012 - 09:41) Игорь_Vasinsky написал(а):
ни чего сложного нет - чтобы создать го**окласс

использование html, sql запросов внутри класса - яркий пример этого.

для работы с БД есть и PDO и объектно-ориентировочный интерфейс у MySQLi

если вы считаете что вы готовы писать такими вот ->


Спустя 22 минуты, 25 секунд (8.02.2012 - 10:03) paa66 написал(а):
Цитата
ни чего сложного нет - чтобы создать го**окласс
Разумеется, буду писать в PHP, напрмер:
$result = "SELECT $fields FROM $table WHERE $field=$criteria ORDER BY $order $desc";
Или "го**окласс", потому что обилие переменных? Я новичок, поэтому прошу объяснить.

Спустя 2 минуты, 58 секунд (8.02.2012 - 10:06) Игорь_Vasinsky написал(а):
изучите процедурный и функциональный стили программирования для начала. - совет.

Спустя 18 минут, 44 секунды (8.02.2012 - 10:25) paa66 написал(а):
Я сейчас немного прочитал про эти стили. Вот что я думаю про это. Когда мы видим, к примеру, паука, нам без разницы - относится ли он к членистоногим или насекомым, заниматься классификацией - это занятие учёных. У меня есть идея упростить код, а каким стилем у меня получится это сделать - для меня не важно. Из предыдущего высказывания я понял, что можно создать универсальный класс, выполняющий запросы к БД, но так не делают опытные программисты, они оставят как у меня сейчас. Или я неправильно понял?

Спустя 4 минуты, 51 секунда (8.02.2012 - 10:30) nugle написал(а):
вот тут есть функция работы с mysql базой, она показывает, на какой строке ошибка, останавливает код, если таковая имеется
http://irbis-team.com/15/4/4
мне лично с ней проще, называется mysqlQuery, просто замена стандартной функции mysql_query, вернее дополнение к ней

Спустя 41 минута, 50 секунд (8.02.2012 - 11:12) paa66 написал(а):
nugle, код интересный, правда, не совсем то, что я хотел. Функция mysqlQuery в качестве аргумента получает переменную (или массив?) $sql в качестве готового запроса. Но я в своих запросах SELECT использую переменные в качестве критерия отбора. Будет ли тогда работать эта функция, если в переменной $sql будет находиться не только строка SELECT * FROM.. и т.д., но и другая переменная, которая является критерием отбора? И ещё, я правильно понял, что у меня не получится создать класс, содержащий в себе универсальную функцию для SELECT
function selectSQL ($fields, $table, $field, $criteria, $order, $desc){
$result = "SELECT $fields FROM $table WHERE $field=$criteria ORDER BY $order $desc";
$db = &JFactory::getDBO();
$db->setQuery($result);
$list = $db->loadAssocList();
return $list;
}
? Или, такого рода "шедевры" опытные программисты не создают?

Спустя 2 часа, 8 минут, 26 секунд (8.02.2012 - 13:20) caballero написал(а):
Цитата
изучите процедурный и функциональный стили программирования

PHP не относится к функциональным языкам. Яваскррипт гдето ближе к этому.

Цитата
У меня есть идея упростить код, а каким стилем у меня получится это сделать - для меня не важно

Количество кода зависит от грамотности программиста а не от парадигмы программирования.

Спустя 2 часа, 28 минут, 30 секунд (8.02.2012 - 15:49) paa66 написал(а):
Цитата
PHP не относится к функциональным языкам.
Значит я неправильно понял статью про функциональный и процедурный стили программирования (в статье не говорилось, что языки могут не поддерживать функциональный стиль или, наоборот, процедурный) и придётся познакомиться с JavaScript.
Цитата
Количество кода зависит от грамотности программиста а не от парадигмы программирования.
Понимаете, у меня цель сделать код более кратким. После прочитанного про классы появилась мысль с помощью класса сократить код, привёл 2 кода и свой вариант сокращения. Но мой вариант к сожалению так никто и не прокомментировал. Пока ввиду отсутствия ответа прислушался к nugle и сделал код по образцу его ссылки.

Спустя 10 минут, 10 секунд (8.02.2012 - 15:59) inpost написал(а):
paa66
Более короткий - это писать так:
mysql_query("SELECT * FROM `table` WHERE `c1`= 'b2'");
Умещается в 1 строчку и зеркально очевидна работа скрипта.

Спустя 45 секунд (8.02.2012 - 16:00) inpost написал(а):
И вообще, класс - это набор функций. Как ты можешь думать о классах, когда ещё толком не разобрался в функции?

Спустя 7 минут, 32 секунды (8.02.2012 - 16:07) sebastjan написал(а):
Ну если подумать об оптимизации кода, можно для начала создать функцию для работы с базой и вызыватьеё с различными нужными параметрами. Функции как раз и нужны для сокращения количества однотипных задач.


Спустя 14 минут, 21 секунда (8.02.2012 - 16:22) paa66 написал(а):

Цитата
Как ты можешь думать о классах, когда ещё толком не разобрался в функции?
Я же написал функцию в классе, проблем не обнаружил, всё работает :)
Цитата
Ну если подумать об оптимизации кода, можно для начала создать функцию для работы с базой и вызыватьеё с различными нужными параметрами.
Вот я и предложил свой код, повторяю его ещё раз:
function selectSQL ($fields, $table, $field, $criteria, $order, $desc){
$result = "SELECT $fields FROM $table WHERE $field=$criteria ORDER BY $order $desc";
$db = &JFactory::getDBO();
$db->setQuery($result);
$list = $db->loadAssocList();
return $list;
}
Но все молчат, видимо, так никто не делает, т.к. это по каким-то соображениям неправильно.

Спустя 12 минут, 40 секунд (8.02.2012 - 16:34) inpost написал(а):
выглядит как джумла.

Ок!
Мой запрос:
$res2 = mysqlQuery("SELECT a.*,b.`photo`
FROM `"
. IRB_DBPREFIX . "user` a
LEFT JOIN `"
. IRB_DBPREFIX . "photo` b ON b.`id_parent` = a.`id`
WHERE (b.`id_parent` IS NULL OR b.`id_parent` IS NOT NULL)
AND a.`id` = "
. $id
);

Как ты его интегрируешь? :)

Спустя 15 минут, 1 секунда (8.02.2012 - 16:49) paa66 написал(а):
Да, я для Джумлы делаю свой первый компонент smile.gif Твой запрос я не смогу интегрировать, т.к. в своём компоненте я его не использую. Я использую запрос типа того, которые я представил, они простые, без объединений Join и Union. Конечно, там есть и типа Insert, но типа Select больше. Под универсальностью я имел ввиду мои простые запросы типа Select, при этом я не претендовал на глобальную универсальность, которая подходила бы к запросу типа твоего.

Спустя 2 минуты, 3 секунды (8.02.2012 - 16:51) inpost написал(а):
paa66
да у тебя и WHERE a=1 AND b=2 уже не будет работать.
Передавать надо массив, его разложить foreach, склеить и сформировать.

Спустя 22 минуты, 43 секунды (8.02.2012 - 17:14) Rand написал(а):
paa66, ну если тебе уж так сильно хочется, можешь добавить метод в класс JDatabase. Что-то вроде такого (взято из modX):

function select($fields = "*", $from = "", $where = "", $orderby = "", $limit = "") {
if (!$from)
return false;
else {
$table = $from;
$where = ($where != "") ? "WHERE $where" : "";
$orderby = ($orderby != "") ? "ORDER BY $orderby " : "";
$limit = ($limit != "") ? "LIMIT $limit" : "";
return $this->query("SELECT $fields FROM $table $where $orderby $limit");
}
}
:D Хотя я лично в этом большого смысла не вижу, мне наоборот удобней когда через один метод все sql запросы.

Спустя 4 минуты, 31 секунда (8.02.2012 - 17:19) nugle написал(а):
Rand
опять же с JOIN не будет работать. Я не вижу в этом необходимости.

Спустя 4 минуты, 21 секунда (8.02.2012 - 17:23) Rand написал(а):
Цитата (nugle @ 8.02.2012 - 20:19)
опять же с JOIN не будет работать. Я не вижу в этом необходимости.

Так я тоже не вижу, я же написал biggrin.gif Ну раз уже так хочется человеку =)

Спустя 15 минут, 40 секунд (8.02.2012 - 17:39) caballero написал(а):
странная попытка сократить количество кода и при этом писать стопицот запросов вместо одного

Спустя 57 минут, 9 секунд (8.02.2012 - 18:36) paa66 написал(а):
В общем, я понял, что так, как выдумал я, опытные программисты не делают. Они не делают, т.к. это нерационально, они уже наступали на эти грабли и глупо будет, если я пойду этим путём. Всё, спасибо за участие!

Спустя 58 минут, 23 секунды (8.02.2012 - 19:34) inpost написал(а):
paa66
Нет. Многие такого даже не придумывают, потому что на момент изучения классов используют сложные запросы.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.