> myMethod的(); vs MyClass :: myMethod();
可能重复:
在PHP中,::(双冒号)和 - >(箭头)有什么区别?
我只是对我看来是两种不同的方式来做同样的事情有个简单的问题。 如果语法不同,请解释它们是什么。
我们假设我们有一个名为MyClass
的类,它有一个名为myMethod
的方法。 它们中的内容可能不相关,因为我们只是从另一个文件中调用它们。
这是我知道的第一种方式(可能有其他方式 - 这些就是我所知道的):
$myvar = new MyClass();
$myvar->myMethod();
第二种方法:
MyClass::myMethod();
如果还有其他方法,特别是更好的方法,尽一切办法详细说明它们,但这里的主要问题是这两个例子之间的区别。
谢谢!
使用MyClass::myMethod();
用静态方法。 和$myvar->myMethod();
在其他情况下。
http://php.net/manual/en/language.oop5.php
第一个在对象上执行一个方法。 第二个在类级别执行一个方法(一个classmethod)。
它们都是不同的东西。
$myObj = new MyClass();
$myObj->myMethod();
这是一个实例方法调用。 您使用刚在上一行中创建的对象引用(在方法定义中以$this
传递)调用它。
MyClass::myMethod();
这是一个静态方法调用。 您按原样调用它,没有任何参考。 只有static
方法可以这样调用。
正如在注释中指出的那样,可以用::
syntax调用实例方法,但以任何方式使用$this
都会产生运行时错误。 这也是你通常不会做的事情。 我想不出有什么用处。 所以坚持以上。