$ myvar-> myMethod的(); vs MyClass :: myMethod();

时间:2011-12-30 22:39:33

标签: php oop class

  

可能重复:
  In PHP, whats the difference between :: (double colon) and -> (arrow)?

我刚才有一个简单的问题,关于我认为做同样事情的两种不同方式。如果除了语法之外还有其他区别,请解释它们是什么。

我们假设我们有一个名为MyClass的类,其方法名为myMethod。它们中的内容可能不相关,因为我们只是从另一个文件中调用它们。

这是我所知道的第一种方式(可能有其他方式 - 这些是我所知道的):

$myvar = new MyClass();
$myvar->myMethod();

第二种方式:

MyClass::myMethod();

如果还有其他方式,特别是更好的方式,请务必详细说明,但这里的主要问题是这两个例子之间的区别。

谢谢!

3 个答案:

答案 0 :(得分:3)

第一个对象执行方法。 第二个在类级别(类方法)执行方法。

它们都是不同的东西。

答案 1 :(得分:3)

$myObj = new MyClass();
$myObj->myMethod();

这是一个实例方法调用。您正在使用刚刚在上一行中创建的对象引用(在方法定义中作为$this传递)调用它。

MyClass::myMethod();

这是静态方法调用。您按原样将称为,没有引用。只有static方法 才能以这种方式调用。


正如评论中所指出的,可以使用::语法调用实例方法,但以任何方式使用$this都会产生运行时错误。这也是你通常不会做的事情。我想不出这种方式有用的方案。所以坚持以上。

答案 2 :(得分:2)

对静态方法使用MyClass::myMethod();。在其他情况下$myvar->myMethod();

http://php.net/manual/en/language.oop5.php