我从来没有在某种语言中看过这样的东西,但是我正在使用PHP数组,它会非常有用,但比任何事情都要好,我很好奇。
常规变量是否可以引用自身。例如:
$variable_array = array(1, 2);
$variable_array = array_merge(self, array(3, 4));
或
$variable_string = 'This is a string';
$variable_string = explode(' ', self);
self
是变量本身,this
就像处理对象一样。现在,我知道有人会问为什么不再调用变量,这就是我在这种情况下通常做的事情。但是,为了在处理长名称(例如数组中的命名索引)时的可读性,这将是有用的。
PHP,或者任何语言都可以这样做或类似吗?
答案 0 :(得分:4)
常规变量是否可以引用自身
否(以你继续描述它的方式),它不是。没有什么比使用标识符(变量名称)更清楚了。这正是它的用途。
$variable_array = array_merge($variable_array, array(3, 4));
想象:
$a = $b = f(self);
我们可以提出一个规则来处理这个问题,但是为什么我们最终可以通过以下方式解决这个问题呢?
$a = $b = f($a);
处理长名称时的可读性,例如数组中的命名索引
您可能会想到Visual Basic的With
PHP没有优雅的等价物。你可以:
$shortName = $veryLongName['with']['many']['indexes'];
答案 1 :(得分:1)
标题问题的答案是yes:$a = &$a;
。但那不是你真正想问的问题。
事实上,您正是期待对象的功能:
为变量赋值函数的返回值,该函数将变量作为参数
$object->modify(); // no parameter, no assignation
或者,您可能正在寻找一个以参数作为参考的函数:
function foo(&$bar) {
$bar = 'buzzle';
}
$qux = 'fizz';
foo($qux);
echo $qux; // output: "buzzle"
别无其他。
答案 2 :(得分:1)
如果您对此感兴趣的唯一原因是
“...处理长名称时的可读性,例如数组中的命名索引......”
然后,考虑到你将不得不至少输入一次长名称,我想你可以创建一个对长命名事物的简短命名引用并使用它。
$short = &$for_example['really']['long']['names']['like']['this'];
$short = explode(' ', $short); // etc.
但这似乎最终会造成比它值得更多的混乱。
答案 3 :(得分:0)
所以,感谢RandomSeed提醒我变量引用,我想出了我认为最接近的解决方案。
以此为例:
$array['index1']['index2']['index3']['index4'];
$array['index1']['index2']['index3']['index4'] = array_merge(
$array['index1']['index2']['index3']['index4'],
array('test' => 'answer'),
array('test2' => 'answer'));
这在我看来并不吸引人,并且有点难以理解,特别是如果页面或控制器动作中有多个这样的话。
所以这是另一种选择:
$self = &$array['index1']['index2']['index3']['index4'];
$array['index1']['index2']['index3']['index4'] = array_merge(
$self,
array('test' => 'answer'),
array('test2' => 'answer'));
对我的实时环境进行快速测试似乎可以验证它是否有效。