我刚接触PHP中的面向对象编程,发现以下两个表达式之间的区别很难理解。
$object->$foo;
$object->foo;
也许这是我的错,但我在手册中找不到相关的部分。
我刚接触PHP中的面向对象编程,发现以下两个表达式之间的区别很难理解。
$object->$foo;
$object->foo;
第一个调用$obj->$foo
使用了所谓的变量变量。查看这个:
class A {
public $foo = 1;
}
$a = new A();
$foo = 'foo';
// now you can use both
echo $a->$foo;
echo $a->foo;
请遵循关于变量变量的手册
好的,为了完全理解看起来有些奇怪的$object->$foo
,您需要了解 PHP 的两件事:
大多数情况下,PHP 中的变量非常直观。它们以一个 $
符号开头,后面跟一个 [a-zA-Z_]
字符,然后是任意数量的 [a-z-A-Z0-9_]
字符。例如:
$var = 'Abcdef';
$_GET = [];
$a1 = 123;
// And so on...
{}
)来命名变量的方式如下所示:scalar type。${null} = 'It works'; echo ${null};
${false} = 'It works'; echo ${false};
${'!'} = 'It works'; echo ${'!'};
// Slightly weirder...
${(int)trim(' 5 ')} = 'It works'; echo ${5};
${implode(['a','b','c'])} = 'It works'; echo $abc;
${"abc"} = 'Abc...';
echo $abc;
"abc"
创建一个变量,也可以使用$abc
访问它。$abc = 'Abc...';
$varName = 'abc';
echo ${$varName}; // echo $abc
$abc = 'Abc...';
$varName = 'abc';
echo $$varName; // echo $abc
$object->$foo
的东西基本上只是一个“对象变量变量”,如果你喜欢的话。$object = new stdClass;
$object->abc = 'The alphabet!';
$foo = 'abc';
echo $object->$foo;
echo $object->{$foo}; // The same
echo $object->{'abc'}; // The same
ClassName::$foo
,访问对象成员使用$object->foo
。 - Royal Bg