使用函数初始化未设置的变量-PHP

使用函数初始化未设置的变量-PHP,php,function,variables,initialization,Php,Function,Variables,Initialization,在执行脚本时,有时会设置变量,有时则不会。如果不是,我会得到一个通知,变量没有定义 为了清除通知,我简单地添加了以下代码 if(!isset($var)) { $var = NULL; } 这就像需要的一样,因为它测试变量是否还没有设置,这样我们就不会将需要设置为NULL的内容设置为NULL。但是在一个有60多个变量的文件中,我认为创建一个简单的函数来实现这一点会更容易。所以我从这个开始: function init($var) { if(!isset($var)) {

在执行脚本时,有时会设置变量,有时则不会。如果不是,我会得到一个通知,变量没有定义

为了清除通知,我简单地添加了以下代码

if(!isset($var)) {
    $var = NULL;
}
这就像需要的一样,因为它测试变量是否还没有设置,这样我们就不会将需要设置为NULL的内容设置为NULL。但是在一个有60多个变量的文件中,我认为创建一个简单的函数来实现这一点会更容易。所以我从这个开始:

function init($var) {
    if(!isset($var)) {
        return $var = NULL;
    }
}
显然,这是行不通的,而且还充满了会困扰大多数程序员的错误(例如函数中的
!isset()
,如果if语句为false,则不提供返回语句,等等),但这只是为了给您提供我需要的基本jist,因此在代码中我可以调用
init($var)
测试变量是否尚未设置,然后创建一个变量并将其设置为NULL,以避免出现这种情况


这可能吗?使用函数测试变量是否已在函数外部设置?提前感谢:)

如果您的目的是:

if(variable is not set)
    set variable to NULL
然后,使用引用很容易实现:

function init(&$var) {
    if(!isset($var)) {
        $var = NULL;
    }
}
测试:

<?php
error_reporting(E_ALL);
function init(&$var) {
    if(!isset($var)) {
        $var = NULL;
    }
}

init($x);
var_dump($x);

在将变量作为参数传递给函数的过程中,如果变量未初始化,则无法使用函数检查变量是否存在。但是,您可以定义脚本所需的变量名数组,然后循环遍历它们并逐个检查它们是否存在。例如:

foreach(array('username','userid','userrole','posts','dob','friends') as $var)
{
    if(!isset($$var))$$var=NULL;
}
编辑:简化user4035的方法,您可以将函数简化为:

<?php
function init(&$var){}
init($myVariable);
var_dump($myVariable);

为什么要处理不知道是否已设置的变量?如果你有用户输入,你将把它们放在一个数组中,并且可以优雅地迭代你正在使用的变量值,而不是实际变量。原因是,例如,其中一个变量是
$\u POST['submit']
。如果单击按钮提交表单,则该变量将有一个值,否则它甚至不存在。因此,当需要在if语句中调用它以查看是否有值
if(($_POST['submit']){…}
时,它会弹出一个通知,告诉我未定义的索引。这不会在传递未设置的变量时生成通知吗???@HardeepSingh我刚刚测试了它:没有生成通知。试着启动我的示例代码。真不敢相信它能起作用。。。您甚至可以将其分解为:
函数init(&$var){}
我喜欢它的简单性!由于您的代码的完善,我同意Ultimater的答案,但否则您的答案将是我一直在寻找的解决方案。谢谢!:)@SteppingHat它创建了对变量的引用:事实上,当我看到创建引用定义了变量时,我感到惊讶,这是一个完整的答案,也是一个很好的方法。它很简单,很漂亮:)我选择了你编辑的user4035原始代码,因为它是所有代码中最简单的,最接近我的原始意图,所以谢谢你!同样在很长一段时间(3年)里,我一直在做一个狡猾的事情,关闭错误报告来绕过它,我认为应该是时候真正彻底摆脱这些通知了
<?php
function init(&$var){}
init($myVariable);
var_dump($myVariable);
<?php
array(&$var1,&$var2,&$var3);//define several variables in one shot as NULL if not already defined.
var_dump($var1);
var_dump($var2);
var_dump($var3);
<?php
$defaults=array('username'=>NULL,'userid'=>0,'userrole'=>'guest','posts'=>0,'dob'=>0,'friends'=>array());

$userid=24334;
$username='bob';
$friends=array(2,5,7);

extract($defaults, EXTR_SKIP);
echo '<pre>';
print_r(
    array(
    'userid'=>$userid,
    'username'=>$username,
    'friends'=>$friends,
    'userrole'=>$userrole,
    'posts'=>$posts,
    'dob'=>$dob)
);
echo '</pre>';
<?php
$v=ini_get("error_reporting");
error_reporting(0);
echo 'One';
echo $doh;//Use an undefined variable
echo ' Two';
error_reporting($v);
<?php
namespace //This is the global namespace
{
    $config=array('production'=>0);
}

namespace MyScript
{
   //Initialize all variables for our script
   //anything not defined here will be inherited from the global namespace
    $username=NULL;
    $userid=NULL;
    $userrole=NULL;
    $posts=NULL;
    $dob=NULL;
    $friends=NULL;

}

namespace MyScript\Main
{
//Define only two variables for our script
//Everything else will be inherited from the parent namespace if not defined
$username='Ultimater';
$userid=4;

    echo '<pre>';
    print_r(
        array(
        'userid'=>$userid,
        'username'=>$username,
        'friends'=>$friends,
        'userrole'=>$userrole,
        'posts'=>$posts,
        'dob'=>$dob,
        'config'=>$config)
    );
    echo '</pre>';
}