Php 传递参数,评估传递的内容

Php 传递参数,评估传递的内容,php,arguments,Php,Arguments,我有一个这样定义的函数:函数测试($var){…} 在该函数中,我想确定调用时是否向其传递了变量或值,例如: test('hello world')应该确定我传递了一个字符串值 test($hello\u world)应该确定我传递了一个名为$hello\u world 这个函数只输出传递的内容并告诉它的数据类型,所以,我目前得到的是:String:“hello world”,但我希望得到的是String($hello\u world):“hello world” 如何检查内部函数test,

我有一个这样定义的函数:
函数测试($var){…}

在该函数中,我想确定调用时是否向其传递了变量或值,例如:

  • test('hello world')
    应该确定我传递了一个字符串值
  • test($hello\u world)
    应该确定我传递了一个名为
    $hello\u world
这个函数只输出传递的内容并告诉它的数据类型,所以,我目前得到的是:
String:“hello world”
,但我希望得到的是
String($hello\u world):“hello world”


如何检查内部函数
test
,以确定通过了什么,以便根据需要更改输出?

作为解决方案的一部分,您可以使用函数了解变量的类型:

function test($var) {
    return gettype($var);
}


echo test('string')."\n";
echo test(true)."\n";
echo test([1, 2, 3])."\n";
$variable = 'test';
echo test($variable)."\n";

// Will output:
// string
// boolean
// array
// string

但我认为没有办法知道它是否是一个变量。它将打印该变量的内容类型,正如您在上次执行中所看到的。一旦进入函数,内容总是该函数的一个变量。

出于好奇,这个函数的用例是什么?我觉得这可能是像Brett这样的XY问题的一个例子,我想不出这有什么用处。你打算用这个主意干什么?你说“确定传递了什么,这样我就可以根据需要更改输出”…但这当然取决于传递的内容,而不是它是否通过变量传递。FWIW我很确定这是不可能的-当你在函数中看到
$var
时,你所知道的只是它里面有什么,而不是它是如何在语法上到达那里的。您要求运行时了解编译时信息。而且你的代码也不应该在意——一个写得好的函数应该是自包含的和可重用的,因此独立于调用它的上下文。@KobusMyburgh这里有一个非常糟糕的概念证明@KobusMyburgh听起来更像是一个输出堆栈跟踪的例子,所以你可以看到哪个代码调用了该函数(然后您可以检查该代码,查看该代码是使用硬编码还是使用变量作为函数的输入),和/或使用实际的调试器(如XDebug)逐步调试代码。同样,您要求运行时告诉您一些实际上是语法问题的内容,因此在构建时而不是运行时处理。正如Greg的演示所表明的,您所问的基本上是不可能的(例如,演示无法从变量中分辨硬编码的数字)。这不是OP想要的。@vivek_23公平地说,答案确实澄清了当它说“我不认为有办法知道它是否是一个变量”。虽然可以说,这可能足以回答问题,因为OP似乎对建议的其他内容不感兴趣。@ADyson,那么这应该是一个评论。@vivek_23可能。尽管“这不可能,抱歉”可能是对问题的完全正确的回答(最好有一点解释作为支持).嗯,我本来打算删除它的,因为我只是尽力帮他,但在最后一刻我得到了一张赞成票…我暂时不写了,但如果你仍然认为我应该删除它,请再告诉我一次,我会做的。