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