$foo->bar()
和$foo::bar()
之间有什么区别?
答案 0 :(得分:4)
$foo::bar()
是对静态方法bar()
的调用,这意味着$foo
方法未对对象__construct()
进行实例化。
调用$foo->bar()
时,必须先对对象$foo
进行实例化!例如:
$foo = new Foo; // internally the method __constuct() is called in the Foo class!
echo $foo->bar();
通常你不会在现有对象(例如$foo
)中调用静态方法,你可以直接在类Foo上调用它:
Foo::bar();
答案 1 :(得分:0)
第一个
$foo->bar();
你调用(对象)方法,而使用
Foo::bar();
你调用class(静态)方法。
可以在对象上调用类方法。也就是说,你的第二个例子是做什么的。所以这个
$foo = new Foo;
$foo::bar();
与
相同Foo::bar();
甚至
$classname = get_class($foo);
$classname::bar();
更新:
错过了什么
$foo
也可以只是一个带有类名的字符串。
$foo = 'Baz';
$foo::bar(); // Baz::bar();