PHP中::和->的区别是什么?

5
可能是重复问题:PHP中::(双冒号)和 ->(箭头)有什么区别?参考 - PHP中这个符号代表什么意思? 我在PHP方面很熟练,但只能用过程化编程。所以我决定学习面向对象编程。我正在逐渐掌握它,也很喜欢它。
在PHP.net上,我经常看到面向对象的表示方式是mysqli::query
然而,我所看到的每个示例都使用了mysqli->query,就像我一直使用的那样。
今天,我遇到了一个实际上使用::的类示例。
那么,我的问题是,::->之间是否有区别?这就像"'之间的区别吗?

2
你可以使用SymbolHound查找此内容。许多答案在这里:http://symbolhound.com/?q=%3A%3A+-%3E - elclanrs
呃...算了吧。在搜索了一个小时后,我终于在发布问题之后找到了答案。哈哈。 - Oberst
谢谢elclanrs。在我发表评论之前,我没有看到你的评论。=) - Oberst
这就是为什么我自己留言说我后来找到了答案。;-) 然而,人们已经在回答了,所以我就没管它了。 - Oberst
2个回答

8

::用于调用静态方法,->用于实例方法。


2
此外,即使它们不是静态方法,文档中的方法通常也会用 :: 引用。我认为这就是他困惑的地方。 - Brad
2
是的,就像在Java中一样,你不使用井号(#)来调用方法,我从来没有理解为什么要这样做。 - Robin Kanters
3
这正是我问 Brad 的原因。谢谢,Robin! - Oberst
既然它回答了你的问题,你能否通过点击绿色勾号来接受它呢?;) - Robin Kanters
1
在1分钟内完成(字面上哈哈) - Oberst

4

::是“范围解析运算符”(又名Paamayim Nekudotayim),通常用于进行静态方法调用(这意味着您将在类本身的上下文中调用该方法,而不是对象)。然而,也有例外情况,比如尝试从重写的方法中调用父方法:

parent::foo(); // uses same context as when the method itself was called

它还允许您引用类的静态属性,例如静态属性和常量。

ClassName::FOO; 
ClassName::$property = "bar";

-> 用于引用实际对象实例中的属性或方法,始终需要在运算符左侧使用对象实例(例如 $this)。


将以下与编程有关的内容从英语翻译为中文。只返回翻译文本:+1,如果能附上相关的PHP官方页面链接将更佳。 - Oberst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接