什么是->PHP运算符调用

What is the “->” PHP operator called and how do you say it when reading code out loud?

在PHP中,这个看起来像箭头的->操作符叫什么?

它可以是减号、破折号或连字符,后跟大于号(或右V形)。

当你大声读代码的时候怎么发音?


官方名称是"对象操作符"-t_对象操作符。我叫它"箭"。


我称之为"飞镖";如$Foo->bar()所说:"飞镖棒"

由于许多语言使用"dot",就像在Foo.bar();中一样,我想用一个单音节的词。箭头"太长了!;)

因为php使用.的"dot"进行连接(为什么?)我不能安全地说"点"——它可能会混淆。

前一段时间,我们和同事讨论过,我们决定用"dart"这个词来形容"dot"这个词,它可以让人感到舒服,但又足够清晰(至少在我们说的时候),不会被误认为是连在一起的"dot"。


当大声读PHP代码时,我不会发"->号运算符的音。对于$db->prepare($query);,我主要说"db(短停顿)准备查询",所以我想我说的就像是一个逗号在一个普通句子中。

Paamayim Nekudotayim("::")也是如此。


当我自己阅读代码时,我认为它是一种"占有性的东西"。

例如:

1
x->value = y->value

将读取"x的值等于y的值"


通常,我在@tor valamo的方法("A的B方法"或"A的B方法")上使用一些变体,但有时我会说"点"。例如,"call a dot b()"。


1
$a->b

我叫"A的B参数"。

1
$a->b()

我称之为"A的B函数"。


属性运算符。

当我大声读$a->b()$a->b时,我只说"在$a obj上打B"或"在$a中打B"


回到cobol的"in",在这里你会说"在a中移动5到b"。现在大多数语言都将事物限定在另一个方向。

但我还是会把$a->b();读作"A中的呼叫B"。


单箭头可以很容易地被口头引用为php oop:member的含义。因此,对于$a->var,您会说"对象A的成员var"。

当大声阅读代码时,它有助于提前阅读(lookahead引用,抱歉),并知道您实际上在引用什么。例如,让我们有以下代码位:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
  Class MyClass {
    $foo = 0;

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

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

所以,如果我大声朗读这个代码块作为代码的演示,我会这样说:

"Define Class 'MyClass', open-brace. Variable 'foo' equals zero, terminate line. Define public function 'bar' open-close parentheses, open-brace. Return member variable 'foo' of object 'this', terminate line. Close-brace, close-brace. Instantiate new instance of 'MyClass' (no arguments) as variable object 'myobject', terminate line. Call member method 'bar' of object 'myobject', terminate line."

但是,如果我大声朗读代码,让其他学生或程序员在没有视觉效果的情况下进行复制,那么我会说:

"PHP open tag (full), newline, indent, Class MyClass open-brace, newline. Indent, ['dollar-sign' | 'Object-marker'] foo equals 0, semicolon, newline, newline. public function bar open-close parentheses, open-brace, newline. Indent, return ['dollar-sign' | 'Object-marker'] this arrow foo, semicolon, newline. Reverse-indent, close-brace, newline, reverse-indent, close-brace, newline, newline. ['dollar-sign' | 'Object-marker'] myobject equals new MyClass open-close parentheses, semicolon, newline. ['dollar-sign' | 'Object-marker'] myobject arrow bar open-close parentheses, semicolon, newline. Reverse-indent, PHP close tag."

当你看到"‘美元符号’’‘目标标记’’"时,只需选择你想说的任何一个,我经常在两者之间切换,这取决于我的观众。

所以,总而言之,在PHP中,->指的是对象的一个成员,无论是变量、另一个对象还是方法。


我个人喜欢在口头表达我的代码时冗长。

例如。:

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

会这样读:

echo(/print) the bar property of object foo.

这是一个冗长而费时的过程,但是我发现如果我有理由口头表达我的代码,那么我可能需要清楚地知道我在传达什么。


我会这样做:

1
2
3
4
5
//Instantiated object variable with the name mono call property name
$mono->name;

//Instantiated object variable with the name mono call method ship
$mono->ship();

在我的书(lorna mitchell的php master)中,它被称为对象操作符。


我工作的高级PHP开发人员说"arrow"。

1
$A->B;

当他告诉我打上面的字时,他会说,"美元A箭头B"或

1
$A->B();

"一美元一箭头二元。"


日本人对此有一个方便的粒子,"不"()。它是占有性粒子,大致意思是"与前一项有关"。

"弗雷德獾"是指"弗雷德獾"。

这是一个很长的说法,至少在精神上,而且在那些懂日语的人中,我倾向于将他们区分为:

1
2
$A->B(); //"Call $A's B."
C::D();  //"Call C の D."

但是,对于非日语使用者来说,把两者都当作所有格的"'s"也行。你也可以翻转它们,使用"of",所以"d of c"…但这有点尴尬,很难做到,因为它会破坏你的线性流动,所以你读得很快。

不过,如果我是在听写,也许是在编写配对代码和建议键入内容时,我会将特定的字符称为"破折号大于箭头"和"双冒号"(如果我知道与我交谈的人是phpophile,我可能会第一次称之为"paamayim nekudotayim double冒号",部分是因为这是一个很酷的笑话,部分是为了防止从"纠正"我)。


->是面向对象模式下用于PHP的属性运算符。


对象。因此,$a->$b->$c将是"对象B对象C"。


用户187291已经回答了非主观问题,至于主观问题,我说"Sub"。例如,我将$x->y发音为"x sub y"——在本文中,"sub"是"subscript"的缩写。这更适用于数组表示法;$x['y']i也发音为"x sub y"。通常,当我大声读代码时,我会用我的话来识别其他开发人员可以看到的行,因此这种模糊性还没有成为一个问题。我认为原因是我把结构/对象和数组看作是"集合",它们的元素以数学符号的形式被下标。