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