1

我对这两种代码感到困惑,想知道它们之间有什么区别:

$object->$lol
// and
$object->lol
4

5 回答 5

4

$object->lol将指向对象类上定义的某些属性:

class SomeClass {
    public $lol = 'some value';
}

$object = new SomeClass();
echo $object->lol; //will yield 'some value'

并将$object->$lol指向对象类上定义的某些属性,但将根据以下值访问正确的属性$lol

class SomeClass {
    public $lol = 'some value';
    public $random = 'random value';
}

$lol = 'random';

$object = new SomeClass();
echo $object->lol; //will yield 'some value'
echo $object->$lol; //will yield 'random value'
于 2013-02-11T10:56:22.870 回答
3

$object->lol访问对象上命名的实例lol变量$object

$object->$lol访问名称包含在变量中的实例$lol变量。它也可以在$object对象上访问。

于 2013-02-11T10:56:25.620 回答
3

AFAIK,它的工作原理与以下相同:

$var  = "var2";
$var2 = "hello world";
echo $$var; // This returns "hello world"

因此,我假设 $object->$lol 会为您获取具有 $lol 变量名称的变量。

这是有关此的更多信息...

于 2013-02-11T10:56:36.380 回答
2

第一个就像

$lol = 'foo';
$object->{$lol} == $object->foo;

第二个是常规的财产访问。

于 2013-02-11T10:54:15.743 回答
1

我会解释给你看,看看这段代码:

<?php
$var1->"hello";
$var2->$var1;
?>

如果我们执行打印或回显,$var1 将显示“hello”,但在 $var2 中我们将再次看到“hello”,因为 $var1 和 $var2 是相同的。

在第二个代码中:

<?php
$var1->"hello";
$var2->"var1";
?>

现在我们打印 $vare1,它会显示“hello”,但 $var2 会显示“var1”。我希望这可以帮助您解决问题。

于 2016-01-18T14:51:06.323 回答