php - 在这种情况下,我可以使用 @ 来避免无用的 isset() 吗?

标签 php

基本上我需要用 $_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';
    

在这种情况下,使用 @ 抑制器是一种糟糕的做法吗?

最佳答案

恕我直言,最优雅的做法是将其包装在一个漂亮的 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');

关于php - 在这种情况下,我可以使用 @ 来避免无用的 isset() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9547749/

相关文章:

php - 如何在不破坏标签的情况下剪辑 HTML 片段?

php 未运行 sqlldr

php - 避免由于页面刷新而提交的最佳方法

php - 使用参数替换准备语句的 mysql 字段名

php - PHP如何读取输入字段的ID?

javascript - 如何将 javascript 变量发送到 PHP 并返回结果

php - 使电话号码可点击以在手机上调用屏幕?

javascript - 如何将网站与屏幕顶部/底部和右侧/左侧的中心对齐?

用于区分用户的 PHP 全局变量(登录)

php - 使用外部数据库中的信息在登录时在 WordPress 网站中创建用户帐户