访问类方法的PHP区别

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


$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();

第一个

$foo->bar();

你调用(对象)方法,而用

Foo::bar();

你可以调用类(静态)方法。

它可能调用对象的类方法。 也就是说,你的第二个例子做了什么。 所以这

$foo = new Foo;
$foo::bar();

是相同的

Foo::bar();

甚至

$classname = get_class($foo);
$classname::bar();

更新:错过了$foo也可能只是一个带有类名的字符串。

$foo = 'Baz';
$foo::bar(); // Baz::bar();
链接地址: http://www.djcxy.com/p/58021.html

上一篇: PHP difference in accessing class methods

下一篇: PHP Using classes