我发现在我的PHP页面中,我最终得到的行和代码行如下所示:
$my_id = isset($_REQUEST['my_id']) ? $_REQUEST['my_id'] : '';
$another_var = isset($_REQUEST['another_var']) ? $_REQUEST['another_var'] : 42;
...
是否有更好,更简洁或更易读的方法来检查此数组并将它们分配给局部变量(如果它们存在)或应用默认值(如果它们不存在?)
编辑:我不想使用register_globals()
- 我仍然有问题。
答案 0 :(得分:6)
如何将它包装在函数中?
<?php
function getPost($name, $default = null) {
return isset($_POST[$name]) ? $_POST[$name] : $default;
}
答案 1 :(得分:4)
更好的方法可能是创建一个单例/静态类来抽象出检查请求数据的细节。
类似的东西:
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;
我认为这会使你的个人脚本加载更清晰,并抽象出验证等。加上这个设计的范围,以扩展它/添加替代行为,添加更复杂的默认处理等等。
答案 2 :(得分:2)
首先,对POSTed变量使用$_POST
。 $_REQUEST
是许多不同传入变量的混搭,而不只是$_POST
,可能会导致问题。
您的问题的一个解决方案是创建一个处理isset()
逻辑的函数。
function ForceIncomingValue($Key, $Default) {
if (!isset($_POST[$Key]))
return $Default;
else return $_POST[$Key];
}
答案 3 :(得分:2)
首先,永远不要使用$ _REQUEST变量,它会在开发过程中导致错误和其他问题
function getPOST($key) {
if(isset($_POST[$key])) {
return $_POST[$key];
}
}
note that this code leaves the variable empty when $_POST[$key]
未设置
您还可以调整该代码,以便在无法加载值时为您提供(合理的)默认值。
function getPOST($key, $default = NULL) { if(isset($_POST[$key])) { return $_POST[$key]; } else { return $default; } }
答案 4 :(得分:1)
在脚本编写时您期望知道的变量集,或者您是否想要为任意值集合执行此操作?如果前者是真的,你可以这样做:
# 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能够评估变量来创建其他变量(因此$$键的双元 - 这意味着创建一个名为$ key值的新变量)。
我还没有找到解决后一种情况的好方法。
答案 5 :(得分:0)
PHP&#39; null coalescing operator!
$username = $_GET['user'] ?? 'nobody';
对于很多变量,通过需求检查,任何人都可以免费使用我的expect
function。