基本上我需要用$_GET['param']
创建一个字符串,如:
$myString = $_GET['param'] . 'abc';
如果$_GET['param']
未设置,我$myString
只是='abc'
所以我可以这样做:
$myString = @$_GET['param'] . 'abc';
或者使用isset的标准方式:
if (!isset($_GET['param']))
$_GET['param'] = '';
$myString = $_GET['param'] . 'abc';
在这种情况下使用@
抑制器正在考虑这样糟糕的实践?
答案 0 :(得分:5)
恕我直言最优雅的东西是用一个漂亮的getter函数来包装它,比如:
function _getParam($param, $default = '') {
if (!isset($_GET[$param]))
return $default;
return $_GET[$param];
}
$myString = _getParam('param').'abc';
是123注意:
正如dvir所说,在框架中为输入变量设置getter函数非常方便。但是这个_getParam
遇到了这个问题:
让我们看看我们在代码中输入错字,我们想访问$_GET['param']
而不是我们输入的内容:
_getParam('parm')
我们的代码可以在不产生任何问题的情况下工作,我们很难找到错误。
所以我认为我们可以修改呈现的功能:
function _get() {
$key = func_get_arg(0);
if (func_num_args()==2) {
if (!isset($_GET[$key]))
return func_get_arg(1);
}
return $_GET[$key];
}
这确保了当我们使用_get('parm')
输入错误时,我们会收到正常通知。但是当我们使用2个参数时,我们得出默认值:
_get('param','myDefaultValue');
答案 1 :(得分:3)
您可以避免像这样使用@
:
$myString = ( isset($_GET['param']) ? $_GET['param'] : '' ) . 'abc';
在这种情况下使用@suppresser正在考虑这么糟糕的实践?
通常从开发人员的角度来看,最好避免使用@
运算符,因为它可能会隐藏在调试特定问题时可能有用的错误。除此之外,它非常缓慢,因此,在未来的PHP版本中,@
won't be supported in ini_set
calls。
答案 2 :(得分:0)
在我看来,这并不是非常优雅(尽管 简短)。我认为你在这里遇到的最糟糕的事情可能就是用你的“标准”方法直接写入$_GET
超全球。
if (!isset($_GET['param'])) $_GET['param'] = '';
也许我是偏执狂,但是之后检查isset($_GET['param'])
的另一个不相关的脚本可以运行,现在它会返回TRUE
,因为你已经注入了''
。
所以,是的 - 你可以在这里安全地使用错误抑制(你不会错过很多),但没有理由避免isset()
:
$myString = isset($_GET['param']) ? $_GET['param'] : '' . 'abc';