PHP函数检查变量是否存在于函数外部

PHP函数检查变量是否存在于函数外部,php,Php,我需要一个PHP函数来检查函数外部是否存在变量。如果不存在,则为其指定默认值 函数类似于:function if_exist$argument,$default=其中$argument将是函数之外的任何变量。它可以是变量的变量,如果变量不存在,$default将是变量的默认值 请避免在函数中使用全局作用域,因为我听说它不利于站点的安全。您可以创建一个函数来使用: 用法: $v = isset_default($v, 'somedefaultvalue'); 您可以创建一个要使用的函数: 用法:

我需要一个PHP函数来检查函数外部是否存在变量。如果不存在,则为其指定默认值

函数类似于:function if_exist$argument,$default=其中$argument将是函数之外的任何变量。它可以是变量的变量,如果变量不存在,$default将是变量的默认值


请避免在函数中使用全局作用域,因为我听说它不利于站点的安全。

您可以创建一个函数来使用:

用法:

$v = isset_default($v, 'somedefaultvalue');

您可以创建一个要使用的函数:

用法:

$v = isset_default($v, 'somedefaultvalue');
您可以使用$argument:

您可以使用$argument:


有两种方法可以做到这一点。您可能正在查找第一个非空值,或者是否设置了实际变量

第一个用例很简单。。。要获取第一个非空变量的值,请定义如下函数:

function coalesce() {
  $args = func_get_args();

  if(is_array($args))
    return null;

  foreach($args as $arg) {
    if($arg !== null)
      return $arg;
  }

  return null;
}
使用此功能很容易。只需使用许多不同的参数调用coalesce,它将始终返回遇到的第一个非空值

$myVar = coalesce($myVar, null, 'Hello There', 'World');
echo $myVar; // Hello there
但是,如果您正在寻找一个函数来检查是否定义了变量,如果它没有定义变量,那么您需要创建一个函数,强制第一个参数成为引用

function set_default(&$variable, $defaultValue = null) {
  if(!isset($variable)) {
    $variable = $defaultValue;

    return false;
  }
  return true;
}

有两种方法可以做到这一点。您可能正在查找第一个非空值,或者是否设置了实际变量

第一个用例很简单。。。要获取第一个非空变量的值,请定义如下函数:

function coalesce() {
  $args = func_get_args();

  if(is_array($args))
    return null;

  foreach($args as $arg) {
    if($arg !== null)
      return $arg;
  }

  return null;
}
使用此功能很容易。只需使用许多不同的参数调用coalesce,它将始终返回遇到的第一个非空值

$myVar = coalesce($myVar, null, 'Hello There', 'World');
echo $myVar; // Hello there
但是,如果您正在寻找一个函数来检查是否定义了变量,如果它没有定义变量,那么您需要创建一个函数,强制第一个参数成为引用

function set_default(&$variable, $defaultValue = null) {
  if(!isset($variable)) {
    $variable = $defaultValue;

    return false;
  }
  return true;
}

我不明白你为什么想要一个函数

$a = isset($a) ? $a : "my default string";
每个人都会理解代码的功能,而不必求助于鲜为人知的PHP特性,也不必查看函数体来了解它的功能


尽管它看起来像一个函数调用,但事实并非如此。是一种语言结构!这就是它不会引起注意的原因。

我不明白您为什么想要一个函数来处理这个问题

$a = isset($a) ? $a : "my default string";
每个人都会理解代码的功能,而不必求助于鲜为人知的PHP特性,也不必查看函数体来了解它的功能

尽管它看起来像一个函数调用,但事实并非如此。是一种语言结构!这就是它不会发出通知的原因。

使用以下命令:

function setGlobalIfNotSet( $variableName, $defaultValue = false ) {

  if ( ! isset( $variableName )) {

    global $$variableName;

    $$variableName = $defaultValue;

  }

}
使用以下命令:

function setGlobalIfNotSet( $variableName, $defaultValue = false ) {

  if ( ! isset( $variableName )) {

    global $$variableName;

    $$variableName = $defaultValue;

  }

}

使用globals不一定与安全性相关,但它使代码更难理解和维护……全局范围与安全性几乎没有任何关系。纯粹主义者不喜欢全局作用域,因为他们觉得它污染了名称空间,使程序难以维护。如果你不滥用它,你会没事的。使用globals不一定与安全性有关,但它会使代码更难理解和维护…Global scope与安全性几乎没有关系。纯粹主义者不喜欢全局作用域,因为他们觉得它污染了名称空间,使程序难以维护。如果你不滥用它,你会没事的。+1因为这是唯一明智的做法。我不认为它漂亮,也不认为它应该被使用,而是依赖于PHP的一些黑魔法。@Andrew:我不是这个意思。黑魔法是,你可以传递一个未识别的变量而不会触发某种错误。相反,PHP将使用null对变量进行静默初始化。对于记录,您的大写锁定处于打开状态。+1,因为这是唯一明智的做法。我不认为它漂亮,也不认为它应该被使用,而是依赖于PHP的一些黑魔法。@Andrew:我不是这个意思。黑魔法是,你可以传递一个未识别的变量而不会触发某种错误。相反,PHP将使用null对变量进行静默初始化。当我意识到他想要一个函数时,我知道我的答案是糟糕的。当我意识到他想要一个函数时,我知道我的答案是badNo,当变量为null时,isset返回false。PS:您可能想命名您的函数:-它必须是引用的原因是,PHP不会对您产生影响,您当然可以在调用范围内对其进行编辑。不,当变量为null时,isset返回false。PS:您可能想命名您的函数:-它必须是引用的原因是,PHP不会对您产生影响,您当然可以编辑它,同时仍在调用范围内发挥作用。需要进行解释。例如,为什么使用双符号$$,$$variableName?为什么?
它会被编译吗?一个解释将是正确的。例如,为什么使用双符号$$,$$variableName?它为什么要编译?