В PHP: проверка на параметр $_GET переменные, если заявления


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

Я проверяю на существование двух переменная $_GET переменные с if() отчетности. Я задаю переменные пустые строки впервые, поэтому я не получаю ошибку, когда я эхо их обратно.

$getvar1 ='';
$getvar2 ='';
$np ='';

if(isset($_GET['getvar1'])) $page_id = $_GET['getvar2'];
if(isset($_GET['getvar2'])) $route = $_GET['getvar2']; 

if(($getvar1 == '' && $getvar1 == '') || $getvar1 == '4')  $np = 'np'; 

    echo "$getvar1 $getvar2 $np"; 

Есть ли лучший способ, чтобы объявить переменные, чем пустые строки?

Есть ли лучший способ проверить и установить параметр $_GET переменные?



19131
3
php
задан 2 августа 2011 в 08:08 Источник Поделиться
Комментарии
3 ответа

Если это небольшое приложение, что-то подобное, вероятно, будет лучше:

$getvar = isset($_GET['getvar']) ? $_GET['getvar'] : 'somedefault';

Если вы хотите испытать больше вещей:

$getvar = isset($_GET['getvar']) && $JUST_PUT_IT_HERE ? $_GET['getvar'] : 'somedefault';

4
ответ дан 3 августа 2011 в 03:08 Источник Поделиться

Как насчет написания функции такой:

function getOrDefault($index, $default)
{
return (!isset($_GET[$index]) || empty($_GET[$index]) ? $default : $_GET[$index]);
}

$getVar1 = getOrDefault('getvar1', '');
$getVar2 = getOrDefault('getvar2', '');

Эта функция должна быть максимально общими и находиться где-то в функции-библиотеки. Я не знаю насчет остальной части вашего проекта. Но, например, если у вас есть какой-то запрос на объект (содержащий всю информацию о текущих (протокол HTTP)запрос), вы могли бы написать специализированные версии:

class Request()
{
public function getPost($param, $default = '')
{
if(!isset($_POST[$param]) || empty($_POST[$param])
{
return $default;
}
return $_POST[$param];
}

// If param is set both in $_GET and $_POST, $_GET is return.
public function getParam($param, $default = '')
{
if(!isset($_GET[$param]) || empty($_GET[$param))
{
return $this->getPost($param, $default);
}
return $_GET[$param];
}
}

$getVar1 = $request->getParam('getVar1', '');
$getVar2 = $request->getParam('getVar2', '');

2
ответ дан 3 августа 2011 в 12:08 Источник Поделиться

Массива Слиянием

Если вы только настройки по умолчанию, вы можете использовать array_merge():

$defaults = array(
'getvar1' => 'default setting', //a default value
'getvar2' => false //now you can just test
);

$params = array_merge($defaults, $_GET); //any missing elements get the default value

echo $params['getvar1']; //will output 'default setting' if $_GET['getvar1'] was not set

if($params['getvar2']){
//do something if $_GET['getvar2'] was set to a non-false value
}

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

Логические Операторы

Вот пример использования логических операторов (аналогично, используя тернарный оператор) по умолчанию в MVC в Zend index.php:

defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

Используя пример вопроса, это будет выглядеть примерно так:

isset($_GET['getvar1']) || $_GET['getvar1'] = 'default value';

2
ответ дан 4 августа 2011 в 07:08 Источник Поделиться