变量是否可以引用自身

时间:2014-08-20 21:45:51

标签: php variables this instance self

我从来没有在某种语言中看过这样的东西,但是我正在使用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,或者任何语言都可以这样做或类似吗?

4 个答案:

答案 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'));

对我的实时环境进行快速测试似乎可以验证它是否有效。