[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Стоит ли принимать $_GET параметр в функцию?
amf1k
Стоит ли принимать $_GET параметр в функцию? например принимаем $_GET['id']

function getResult($id){
//что то делаем с $id
}
print_r (getResult($_GET['id']));

function getResult(){
$id = $_GET['id'];
//что то делаем с $id
}
print_r (getResult());


какая здесь разница???
Invis1ble
большая
второй вариант - говнокод, т.к. привязывается к окружению

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

amf1k
Цитата (Invis1ble @ 16.05.2015 - 23:47)
большая
второй вариант - говнокод, т.к. привязывается к окружению

а если мне "просто" нужно вывести инфу с БД по id ???
chee
amf1k, а если тебе нужно будет это сделать в 10 разных местах с разными идентификаторами, ты будешь переопределять везде элемент в массиве $_GET ?

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
amf1k
Цитата (chee @ 17.05.2015 - 00:22)
amf1k, а если тебе нужно будет это сделать в 10 разных местах с разными идентификаторами, ты будешь переопределять везде элемент в массиве $_GET ?

как это переопределять?
stump
Цитата (amf1k @ 16.05.2015 - 23:53)
Цитата (Invis1ble @ 16.05.2015 - 23:47)
большая
второй вариант - говнокод, т.к. привязывается к окружению

а если мне "просто" нужно вывести инфу с БД по id ???

1) должна быть функция которая обрабатывает суперглобальные массивы обезвреживая данные.
2) должны быть функция которая проверяет есть ли подготовленные данные.
3) должна быть функция которая строит запросы к бд.
4) уровень обработки данных и уровень должны быть изолированы от уровня приложения.

п.с. первый вариант не далеко ушел от второго.

_____________
Трус не играет в хокей
amf1k
с этим все ясно, спасибо)
2-й вопрос:
пришел массив айдишников с формы
$arr = array(1,4,9,20);

вариан первый:
есть функция выборки инфы по id
function getResult($id){
//Функция возвращает инфу c БД (чего то) по id
}

нужно в цикле вывести информацию по айдишниках с формы
foreach($arr as $value){
$result = getResult($value);
echo $result['поле чего то'];
}

вариант второй:
есть функция выборки инфы
function getResult($array){
//преобразование массива айдишников в строку
$list_id = implode(',', $array);
//запросс
$query = 'SELECT `все поля` FROM `таблица` WHERE `id` IN("$list_id")';
//Возвращаем массив по выбранным id
}

и простой вывод
$arr = getResult($arr);
foreach($arr as $value){
echo $value['поле чего то'];
}

какой вариант будет правильней и быстрее???
Arh
Быстрее второй. Хотя бы по тому, что будет только один запрос в базу.
Правильней тоже второй, потому что читай выше.

В первом варианте вообще можно обойтись без функции, просто сделав запрос и разобрав его в цикле, так что вариант не о чём.

Есть рекомендации по проектированию структуры кода, называются MVC. Почитай.

Если вкратце:
Не надо писать простыню, то есть все в одном файле, и логику как во втором примере и вывод в шаблон как в блоке с echo $value['поле чего то']; и условия, которые отвечают за то, какую функцию запустить.

По сути нужно поделить это на 3 части (на 3 файла).
1 часть - это контроллер. Главный файл который всё контролирует, распределяет.
Пример index.php:

#В контроллер пришёл запрос "показать новость"
if(isset($_GET['news'])) {

get_news($_GET['news']);

#Если не было запросов, контроллер показывает что то другое
} else {

что_то_другое();

}


То есть контроллер сам ничего не запрашивает из базы, он вообще ничего не делает кроме как распределяет запросы на чуваков, которые за это отвечают. В данном случае это get_news() и что_то_другое().

2 часть - это модель. Файл с функциями/методами. Это как раз те чуваки, которым контроллер дал задание, они делают всю грязную работу.
Пример model.php:

function get_news($id){

//какието проверки, запрос в базу, что то там построить, что то пофиксить, return

};


3 часть - это шаблон. Файл с html, в котором выводятся данные.
Например ты получил массив с новостями от модели get_news();
index.html:

<div class="blabla">
<?php
foreach ($array as $news) :?>
<p><?php
echo $news['title'];?></p>
<p><?php
echo $news['content'];?></p>
<?php
endforeach;?>
</div>


В итоге получается так, контроллер (начальник) получил инструкции в виде $_GET, $_POST или еще как то. Подключил нужную модель (бригаду, которая будет эти инструкции выполнять). Потом результат отправил в шаблон (дизайнерам).



$Tpl = new tpl; //Допустим подключили шаблонизатор какойто
$Brigada1 = new brigada1; //Допустим подключили модель
$Brigada2 = new brigada2;


if(isset($_GET['news'])) {

//Передали в шаблонизатор (часть 3) данные от get_news
$Tpl->display('index.html', $Brigada1->get_news($_GET['news']));

#Если не было запросов, контроллер показывает что то другое
} else {

$Tpl->display('error.html', $Brigada2->что_то_другое());

}


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

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