php - 如果未设置变量,则使用函数初始化变量 - PHP

标签 php function variables initialization

执行脚本时,有时会设置变量,有时不会。有时它不是,我会收到一个通知,指出变量未定义。

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

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/

相关文章:

php - 简单的 Laravel SELECT 语句正在耗尽内存

PHP将组合插入到mysql

java - 在 Java (Eclipse) 中同时运行函数

javascript - 创建用于向元素添加样式的原型(prototype)函数

php - 从查找表中动态检索表的字段

Python: "Multiple"函数中有多个参数

java - 在 Spring MVC 中创建全局变量的最佳方法

java - 我们可以在作业的 LHS 上构建和使用字符串吗?

c - 对于这些片段我们能说些什么呢?

php - 网络字节顺序到 php 中的主机字节顺序转换