PHP访问类方法的区别

时间:2011-02-24 13:56:40

标签: php class methods

$foo->bar()$foo::bar()之间有什么区别?

2 个答案:

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