执行脚本时,有时会设置变量,有时不会。有时它不是,我会收到一个通知,指出变量未定义。
为了清除通知,我简单地添加了以下代码
if(!isset($var)) {
$var = NULL;
}
这会按需工作,因为它会测试变量是否尚未设置,这样我们就不会将需要的内容设置为 NULL。但是在一个包含 60 多个变量的文件中,我认为创建一个简单的函数来执行此操作会更容易。所以我从这个开始:
function init($var) {
if(!isset($var)) {
return $var = NULL;
}
}
显然那是行不通的,而且还充满了会惹恼大多数程序员的错误(例如函数内部的 !isset()
,如果 if 不提供返回语句语句是错误的,等等)但这只是为了给你我需要的基本内容,所以在代码中我可以调用 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 :
<?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);
不过我建议不要使用这种方法,因为它只是隐藏错误而不是修复错误,并且还会隐藏值得您注意的错误。
我个人最喜欢的是利用 namespaces .
通常你会把它们放在单独的文件中,但为了方便起见,我把它们放在一个片段中:
<?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>';
}
关于php - 如果未设置变量,则使用函数初始化变量 - PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20774783/