Я дал бы XLINQ (чтение: LINQ к XML) попытка. Это легко, интуитивно и легко доступно для редактирования.
Как насчет того, чтобы обернуть его функцией?
<?php
function getPost($name, $default = null) {
return isset($_POST[$name]) ? $_POST[$name] : $default;
}
лучшим методом может быть создание одноэлементного / статического класса, чтобы абстрагироваться от деталей проверки данных запроса.
Что-то вроде:
class Request {
private $defaults = array();
private static $_instance = false;
function getInstance () {
if (!self::$_instance) {
$c = __CLASS__;
self::$_instance = new $c;
}
return self::$_instance;
}
function setDefaults($defaults) {
$this->defaults = $defaults;
}
public function __get($field) {
if (isset($_REQUEST[$field]) && !empty($_REQUEST[$field])) {
return $_REQUEST['field'];
} elseif (isset($this->defaults[$field])) {
return $this->defaults[$field];
} else {
return ''; # define a default value here.
}
}
}
затем вы можете сделать:
# get an instance of the request
$request = Request::getInstance();
# pass in defaults.
$request->setDefaults(array('name'=>'Please Specify'));
# access properties
echo $request->name;
echo $request->email;
Я думаю, что это делает ваши отдельные скрипты более чистыми и абстрагирует от проверки и т. Д. Плюс множество возможностей с этим дизайном, чтобы расширить его / добавить альтернативное поведение, добавить более сложную обработку по умолчанию и т. Д.
Сначала используйте $ _ POST
для POSTed переменные. $ _ REQUEST
представляет собой смесь множества различных входящих переменных, а не только $ _ POST
, и может вызвать проблемы.
Одним из решений вашего вопроса было бы создание функции, которая обрабатывает isset ()
логика.
function ForceIncomingValue($Key, $Default) {
if (!isset($_POST[$Key]))
return $Default;
else return $_POST[$Key];
}
Известен ли ожидаемый набор переменных на момент написания сценария, или вы хотите сделать это для произвольного набора значений? Если первое верно, вы можете сделать что-то вроде этого:
# This array would hold the names of all the variables you're expecting
# and a default value for that variable name
$variableNames = array (...);
foreach ($variableNames as $key => $default) {
if (isset ($_REQUEST[$key])) $$key = $_REQUEST[$key];
else $$key = $default;
}
В основном, это использует возможность PHP оценивать переменные для создания других переменных (отсюда двойной доллар для клавиши $$ - это означает создание новой переменной, чей name - это значение $ key).
Я еще не нашел хорошего решения для последней ситуации.
Прежде всего, НИКОГДА не используйте переменную $ _REQUEST, это приведет к ошибкам и другим проблемам во время разработки.
function getPOST($key) {
if(isset($_POST[$key])) {
return $_POST[$key];
}
}
обратите внимание, что этот код оставляет переменную пустой, когда $ _POST [ $ key] не был установлен
, вы также можете адаптировать этот код, чтобы вместо этого предоставить вам (разумное) значение по умолчанию, когда значение не может быть загружено.
function getPOST($key, $default = NULL) { if(isset($_POST[$key])) { return $_POST[$key]; } else { return $default; } }