Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从函数中调用的Var dump给出了无意义的结果_Php - Fatal编程技术网

Php 从函数中调用的Var dump给出了无意义的结果

Php 从函数中调用的Var dump给出了无意义的结果,php,Php,我认为这个问题是自我暗示的,但即使如此,我还是会尽我所能来解决这个问题 什么 变量在脚本的一开始就被初始化,但是我的var_转储中有一半返回NULL 为什么?您试图访问范围之外的变量$name、$url和$active在add赞助商函数之外声明;因此,函数认为您正在创建新变量并将其初始化为null。函数正在调用它所认为的var\u dump,因为您尝试访问的变量在全局范围内。page对此进行了很好的解释。要从函数中访问这些变量(而不将它们作为参数传入),您需要使用global关键字告诉PHP它们

我认为这个问题是自我暗示的,但即使如此,我还是会尽我所能来解决这个问题

什么

变量在脚本的一开始就被初始化,但是我的var_转储中有一半返回NULL


为什么?

您试图访问范围之外的变量$name、$url和$active在add赞助商函数之外声明;因此,函数认为您正在创建新变量并将其初始化为null。

函数正在调用它所认为的
var\u dump
,因为您尝试访问的变量在全局范围内。page对此进行了很好的解释。

要从函数中访问这些变量(而不将它们作为参数传入),您需要使用
global
关键字告诉PHP它们已在全局范围内声明:

$name = $_POST["name"];
$url = $_POST["url"];
$active = $_POST["active"];

if($action == "add")
{
    var_dump($name); // Returns: String(10) "..."
    var_dump($url); // Returns: String(27) "..."
    var_dump($active); // Returns: String(2) "..."

    addSponsor(); // Returns: NULL NULL NULL
}

function addSponsor()
{
    var_dump($name);
    var_dump($url);
    var_dump($active);
}
我建议指定形式参数,并将变量作为参数传递给函数:

function addSponsor()
{
    global $name, $url, $active;
    var_dump($name);
    var_dump($url);
    var_dump($active);
}

请参见

如果必须,您可以执行以下操作:

function addSponsor($name, $url, $active)
{
    var_dump($name);
    var_dump($url);
    var_dump($active);
}
但全局变量是不好的形式。我会像这样重写你的脚本:

function addSponsor() {
    global $name, $url, $active;

    var_dump($name);
    var_dump($url);
    var_dump($active);
}

如果要在函数中使用这些变量,必须将其声明为全局变量:

$post_vars = array(
    'name'   => $_POST["name"],
    'url'    => $_POST["url"],
    'active' => $_POST["active"]
);

if ($action === "add") {
    foreach ($post_vars as $post_var) {
        var_dump($post_var);
    }
    addSponsor($post_vars);
}

function addSponsor($post_vars = array()) {
    foreach ($post_vars as $post_var) {
        var_dump($post_var);
    }
}

为了便于阅读,我强烈建议编写一个实用函数,如:

function addSponsor()
{
    global $name, $url, $active;
    var_dump($name);
    var_dump($url);
    var_dump($active);
}
函数DumpVar($obj){
回声“;
var_dump($obj);
回声“;
}

另外,请注意,使用输出缓冲(、等)很好,但可能会被var_dump搞砸;如果您在ob结构中的页面中,则需要注意一些内容。我之所以会遇到这种情况,是因为我试图在输出缓冲区中捕获一个var_dump字符串,以便在alert()中显示JSON数据。你可以解决它,但要记住。评论中有一个成功的ob HTML方法的例子。

我自己、
$name
$url
、和
$active
都是函数的参数。我很想知道为什么有人会将其降级。我不得不说,由于PHP缺乏在线调试功能,我的小Dump()函数是我最常用的实用程序调用,也是解决一些新问题时的第一道防线。不知道您从SOAP调用中得到的XML是什么,或者您创建的json数据,或者其他很多东西?转储()!:)
function DumpVar($obj) {
    echo "<pre>";
    var_dump($obj);
    echo "</pre>";
}