可能重复:
In PHP, whats the difference between :: (double colon) and -> (arrow)?
我刚才有一个简单的问题,关于我认为做同样事情的两种不同方式。如果除了语法之外还有其他区别,请解释它们是什么。
我们假设我们有一个名为MyClass
的类,其方法名为myMethod
。它们中的内容可能不相关,因为我们只是从另一个文件中调用它们。
这是我所知道的第一种方式(可能有其他方式 - 这些是我所知道的):
$myvar = new MyClass();
$myvar->myMethod();
第二种方式:
MyClass::myMethod();
如果还有其他方式,特别是更好的方式,请务必详细说明,但这里的主要问题是这两个例子之间的区别。
谢谢!
答案 0 :(得分:3)
第一个对象执行方法。 第二个在类级别(类方法)执行方法。
它们都是不同的东西。
答案 1 :(得分:3)
$myObj = new MyClass();
$myObj->myMethod();
这是一个实例方法调用。您正在使用刚刚在上一行中创建的对象引用(在方法定义中作为$this
传递)调用它。
MyClass::myMethod();
这是静态方法调用。您按原样将称为,没有引用。只有static
方法 才能以这种方式调用。
正如评论中所指出的,可以使用::
语法调用实例方法,但以任何方式使用$this
都会产生运行时错误。这也是你通常不会做的事情。我想不出这种方式有用的方案。所以坚持以上。
答案 2 :(得分:2)
对静态方法使用MyClass::myMethod();
。在其他情况下$myvar->myMethod();
。