如果未初始化变量并将其作为参数传递给函数,则无法使用函数检查变量是否存在。但是,您可以定义一个包含脚本所需变量名称的数组,然后循环遍历它们并逐个检查它们是否存在。例如:
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);
var_dump($var1);
var_dump($var2);
var_dump($var3);
另一种方法是使用
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;
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>';
}
$_POST['submit']
。如果单击按钮提交表单,则该变量将具有值,否则它甚至不存在。因此,当调用它以在 if 语句中查看是否存在值时if(($_POST['submit'])){...}
,它会输出一个通知告诉我 _Undefined Index_。 - SteppingHat