任何人都知道如果用PHP可以实现这一点吗?
function foo($var) {
// the code here should output the value of the variable
// and the name the variable has when calling this function
}
$hello = "World";
foo($hello);
Run Code Online (Sandbox Code Playgroud)
会给我这个输出
varName = $hello
varValue = World
Run Code Online (Sandbox Code Playgroud)
编辑
由于这里的大多数人"指责"我的不良做法和全局变量,我将进一步详细阐述我们为什么要寻找这种行为.
我们正在考虑这种行为的原因是我们希望更容易为视图分配变量.
大多数情况下,我们这样做是为我们的视图分配变量
$this->view->assign('products', $products);
$this->view->assign('members', $members);
Run Code Online (Sandbox Code Playgroud)
虽然只是能够执行以下操作并让视图负责确定变量名称,分配的数据会在我们的视图中进行,这样会更容易,更易读.
$this->view->assign($products);
$this->view->assign($members);
Run Code Online (Sandbox Code Playgroud)
简答:不可能.
龙答:你可以挖通apd,bytekit,runkit,的Reflection API和debug_backtrace,看看是否有模糊的组合将让你实现这个行为.
但是,最简单的方法是简单地将变量名称与实际变量一起传递,就像您已经做的那样.它简短,易于掌握,当您需要变量具有不同的名称时它很灵活,并且它比任何可能能够实现其他所需行为的代码更快.
把事情简单化
OP编辑问题后删除不相关的部分
尽管我怀疑这是否可能,但我认为强迫程序员如何命名他的变量通常是一个坏主意。你必须回答这样的问题
为什么我不能将变量命名
$arrProducts为$products?
如果您想将函数的返回值放入视图中,您也会遇到严重的麻烦。想象一下以下代码,其中(无论出于何种原因)类别需要小写:
$this->view->assign(strtolower($category));
Run Code Online (Sandbox Code Playgroud)
这不符合您的计划。
因此,我的答案是:坚持“详细”的工作方式,它更容易阅读和维护。
如果你不能忍受这一点,你仍然可以向视图添加一个神奇的函数:
public function __set($name, $value) {
$this->assign($name, $value);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以写
$this->view->product = $product;
Run Code Online (Sandbox Code Playgroud)