"->" PHP 操作符被称为什么?

128

在 PHP 中,这个看起来像箭头的 -> 操作符要怎么称呼呢?

它通常被称为减号、短横线或连字符,后面跟着一个大于号(或右尖括号)。

当朗读代码时,你应该如何发音呢?


1
在C++中,“->”运算符被称为“指针的成员”,但是PHP的“->”运算符实际上更接近C++中的“.”运算符,称为“对象的成员”。 - Sam Hobbs
15个回答

136

9
请注意,词汇标记并不总是指代该标记通常所指的内容。例如,:: 的名称为 "作用域解析运算符",但在该文章中列出为 T_DOUBLE_COLON。等我得到更多的投票后,我会给你点赞 :) - Billy ONeal
1
如果你读到"And after B executes and return the salary, A arrow C",会感觉很奇怪。更准确的表达应该是A指向C。 - Ben
66
比利是对的,大多数人在日常交谈中称 "::" 为 "T_PAAMAYIM_NEKUDOTAYIM"。 - Alana Storm
请查看PHP:运算符手册底部。有人说了你说的话,结果被踩了81次。请注意,T_OBJECT_OPERATOR是一个内部标签;它不适用于用户使用,对吧?我找不到任何关于“->”运算符的文档,只有在其使用文档中的示例。 - Sam Hobbs

58
我称它为“dart”,就像$Foo->bar()中的“Foo dart bar”。
由于许多语言使用“点”符号,如Foo.bar();,我想使用一个单音节的词。 "Arrow"太啰嗦了! ;)
由于PHP使用“.”进行连接(为什么?),我不能安全地说“点”——这可能会引起混淆。
和一位同事讨论后,我们决定将“dart”作为一个类似于“dot”的词来使用,它足够相似以使得发音自然,但又足够独特(至少在我们发音时)以不被误认为是连接用的“dot”。

39
阅读 PHP 代码时,我不会读出 "->" 操作符。对于 $db->prepare($query);,我通常会说 "Db[短暂停顿]准备查询"。因此,我想我会像普通句子中的逗号一样说出它。
对于 Paamayim Nekudotayim ("::") 也是如此。

10
Paamayah是什么?开个玩笑吧。 - ValleyDigital
1
也被称为作用域解析运算符 - CommandZ

14

阅读代码时,我会将其视为一种“占有物”。

例如:

x->value = y->value

将读作“x的值等于y的值”


9

我最常使用的是@Tor Valamo方法的某些变体(“A的B方法”或“A的B方法”),但有时我会说“点”。例如,“调用A点B()”。


5
我总是说“a dot b”,因为在几乎所有其他语言中都是这样。PHP 和非 PHP 的开发人员似乎总能理解我。 - Gareth
1
是的,我回到“点”上,因为它在大多数其他语言中实现了与点运算符相同的功能。问题是,在C/C++中,->具有不同于实际点运算符的功能,你会如何称呼它? - user229044

4
$a->b 

我被称为“$a的参数b”。
$a->b()

我称之为"$a的函数b"。

4

属性运算符。

当阅读$a->b()$a->b时,我会大声说“在$a对象上调用b”或“从/在/获取$a中获取b”。


1
@Tor,我猜也是“方法运算符”。 - Marcus Adams
@Marcus Adams - 其实不完全是这样,因为在大多数编程语言中,方法只是恰好是函数的属性。但在仅限于PHP的情况下,有很大的区别,但我仍然会称其为属性。 - Tor Valamo

4
回顾一下 Cobol 中的 'in',你会说 "Move 5 to b in a."。而今天大多数语言则是反过来限定事物。
但我仍然会将 $a->b(); 理解为 "在 a 中调用 b"。

4

我个人喜欢在代码中口头表达得更详细。

例如:

$foo = new Foo();
echo $foo->bar

将对象foo的bar属性输出/打印。

虽然这种表述冗长且耗时,但如果我需要口头表达我的代码,那么我可能需要确切地了解我正在传达的内容。


3
单箭头可以口语化地解释为 PHP OOP 中的成员。因此,对于 $a->var,你可以说“对象 a 的成员 var”。
当大声朗读代码时,提前阅读并知道你可能需要引用的内容是有帮助的。例如,让我们看下面的一段代码:
<?php
  Class MyClass {
    $foo = 0;

    public function bar() {
      return $this->foo;
    }
  }

  $myobject = new MyClass();
  $myobject->bar();
?>

如果我要朗读这段代码来演示代码,我会这样说:
“定义类'MyClass',打开大括号。变量'foo'等于零,结束行。定义公共函数'bar'(无参数),打开大括号。返回对象'this'的成员变量'foo',结束行。关闭大括号,关闭大括号。将新实例化的'MyClass'(无参数)作为变量对象'myobject',结束行。调用对象'myobject'的成员方法'bar',结束行。”
然而,如果我要为其他学生或程序员朗读代码以进行复制而没有可视化,则会这样说:
“PHP开标签(全),换行,缩进,类MyClass打开大括号,换行。缩进,['dollar-sign' | 'Object-marker'] foo等于0,分号,换行,换行。公共函数bar打开关闭括号,打开大括号,换行。缩进,返回['dollar-sign' | 'Object-marker'] this箭头foo,分号,换行。反向缩进,关闭大括号,换行,反向缩进,关闭大括号,换行,换行。['dollar-sign' | 'Object-marker'] myobject等于new MyClass打开关闭括号,分号,换行。['dollar-sign' | 'Object-marker'] myobject箭头bar打开关闭括号,分号,换行。反向缩进,PHP关闭标签。”
在您看到['dollar-sign' | 'Object-marker']时,只需选择您经常使用的'$'进行讲话,我经常在两者之间切换,这取决于我的受众。
因此,在PHP中,“->”指的是对象的成员,无论是变量、另一个对象还是方法。

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