是否有“isset结构”的快捷方式?

时间:2011-11-21 18:25:45

标签: php isset

我经常写这行代码:

$myParam = isset($params['myParam']) ? $params['myParam'] : 'defaultValue';

通常,它会使嵌套数组的行非常长。

我可以缩短它吗?

9 个答案:

答案 0 :(得分:14)

function getOr(&$var, $default) {
    if (isset($var)) {
        return $var;
    } else {
        return $default;
    }
}

$myParam = getOr($params['myParam'], 'defaultValue');

请确保通过引用传递变量,否则代码将生成E_NOTICE。此外,有意使用if / else而不是三元运算符,因此如果您使用PHP<可以共享zval。 5.4.0RC1。

答案 1 :(得分:3)

是的,通过制作代理功能,但它真的值得吗?

此外,isset是一种语言结构,因此将其包含在代理函数降低性能,尽管降级可能不会轻微(甚至不值得一提)。

答案 2 :(得分:3)

PHP 7将包含完全相同的??运算符。

请参阅https://wiki.php.net/rfc/isset_ternary,示例:

// Fetches the request parameter user and results in 'nobody' if it doesn't exist
$username = $_GET['user'] ?? 'nobody';
// equivalent to: $username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

答案 3 :(得分:1)

这就是我使用的:

function getindex($arr, $index, $default = null) {
    return isset($arr[$index]) ? $arr[$index] : $default;
}

答案 4 :(得分:0)

从PHP 5.3起,您可以使用:

$myParam = $params['myParam'] ?: 'defaultValue';

但请注意,$params['myParam']isset($params['myParam'])不是100%相同。

答案 5 :(得分:0)

没有。不幸的是,你不能。不是一个体面的方式。你至少必须屈服于表现。

更新:自PHP7起,??就可以做到这一点。见https://wiki.php.net/rfc/isset_ternary

答案 6 :(得分:0)

我正在使用这个作为变量

的小魔法类
class Post() {
 private $post = Array();
 public function __construct() {
  $this->post = $_POST;
 }
 public function __get($name) {
  return @$this->post[$name];
 }
 public function __set($name, $value) {
  return $this->post[$name] = $value;
 }
 public function __call($function, $params) {
  if(isset($this->post[$function])) {
   return $this->post[$function];
  } else {
   $this->post[$function] = $params[0];
   return $params[0];
  }
 }
}
$post = new Post();

然后在文档中,您可以轻松地将其用作任何其他变量,例如$post->name $post->somelist[2]或默认值$post->name("John Doe"),然后返回并存储。< / p>

答案 7 :(得分:0)

我知道这并没有缩短你的任何内容,但我认为我只是分享这个,我在我的应用程序中使用了很多,以确保设置了一些东西,并且有价值。

function is_blank($var = NULL){
    return empty($var) && !is_numeric($var) && !is_bool($var);
}    

function chk_var($var = NULL){
    return (isset($var) && !is_null($var) && !is_blank($var));
}

则...

if(chk_var($myvar)){ ... }

答案 8 :(得分:-1)

如果你经常这样做,你可能会忽略这一点。

事实上,变量应在使用前定义 所以,如果你的参数未定义,就不会出现这种情况 只需创建一个默认的params文件,并初始化每个变量。

$params['myParam'] = 'defaultValue'; 

以后它可以在某些情况下改变,但它永远不会被定义 有了主意吗?