如果未设置变量,则使用函数对其进行初始化 - PHP

2024-01-11

执行脚本时,有时会设置变量,有时不会。有时情况并非如此,我会收到一个通知,表明该变量未定义。

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

if(!isset($var)) {
    $var = NULL;
}

它可以根据需要工作,因为它测试变量是否尚未设置,这样我们就不会设置我们需要的东西NULL。但在一个文件中有超过 60 个属于这种情况的变量以及未来更多的变量,我认为创建一个简单的函数来执行此操作会更容易。所以我从这个开始:

function init($var) {
    if(!isset($var)) {
        return $var = NULL;
    }
}

显然,这是行不通的,而且还充满了会让大多数程序员烦恼的错误(例如!isset()在函数内部,如果 if 语句为 false,则不提供 return 语句,等等)但这只是为了给你我需要的基本要点,所以在代码中我可以调用init($var);测试该变量是否尚未设置,然后创建一个并将其设置为NULL以避免通知。

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


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

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);

或者甚至完全避免使用某个函数:

<?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);

另一种方法是使用extract http://www.php.net/extract:

<?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);

不过,我建议不要使用这种方法,因为它只是隐藏错误而不是修复错误,并且还会隐藏值得您注意的错误。

我个人最喜欢的是利用命名空间 http://www.php.net/manual/en/language.namespaces.rationale.php.
通常您会将它们放入单独的文件中,但为了方便起见,我将它们放入一个片段中:

<?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>';
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果未设置变量,则使用函数对其进行初始化 - PHP 的相关文章