什么是“->”PHP 运算符? [关闭]
Posted
技术标签:
【中文标题】什么是“->”PHP 运算符? [关闭]【英文标题】:What is the "->" PHP operator called? [closed] 【发布时间】:2011-02-04 23:59:28 【问题描述】:你怎么称呼这个箭头在 php 中找到->
运算符?
它可以是减号、破折号或连字符,后跟大于号(或右 V 形)。
大声朗读代码时如何发音?
【问题讨论】:
在 C++ 中,“->”运算符被称为“指针成员”,但 PHP 的“->”运算符实际上更接近于“.”。 C++ 中的运算符,称为“对象成员”。 【参考方案1】:正式名称是“对象运算符”-T_OBJECT_OPERATOR。
【讨论】:
请注意,词法标记并不总是该标记通常被引用。例如, :: 的名称是“范围解析运算符”,但在该文章中列为T_DOUBLE_COLON
。当我获得更多选票时,我会 +1 给你 :)
好吧,如果你读到“并且在 B 执行并返回工资后,A 箭头 C”,这听起来很奇怪。它更像是 A 指代 C。
Billy 说得对,大多数人在闲聊中称 :: 为 T_PAAMAYIM_NEKUDOTAYIM
查看PHP: Operators - Manual的底部。有人说了你说的话,他们被否决了 81 次。注意 T_OBJECT_OPERATOR 是一个内部标签;它不是供用户使用的,对吗?我找不到任何有关“->”运算符的文档,只是其使用文档中的示例。【参考方案2】:
我称之为“飞镖”;如$Foo->bar()
:“Foo dart bar”
由于许多语言都使用“点”,就像Foo.bar();
一样,我想要一个单音节词。 “箭”太啰嗦了! ;)
由于 PHP 使用.
“点”进行连接(为什么?)我不能安全地说“点”——它可能会混淆。
不久前与一位同事讨论时,我们决定将“dart”作为一个与“dot”相似的词,以便流畅地流动,但又足够独特(至少在我们说它时)不会被误认为是连接“点”。
【讨论】:
【参考方案3】:大声朗读 PHP 代码时,我不发音“->”运算符。对于$db->prepare($query);
,我主要说“Db [short pause] 准备查询。”所以我想我把它说成是一个普通句子中的逗号。
Paamayim Nekudotayim(“::”)也是如此。
【讨论】:
Paamayah 什么? jk 也称为Scope Resolution Operator【参考方案4】:当我自己阅读代码时,我认为它是一种“占有欲”。
例如:
x->value = y->value
将读取“x 的值等于 y 的值”
【讨论】:
【参考方案5】:大多数情况下,我使用@Tor Valamo 方法的一些变体(“A 的 B 方法”或“A 的 B 方法”),但有时我会说“点”。例如。 “调用 A 点 B()”。
【讨论】:
我总是说“a dot b”,因为几乎所有其他语言都是这样。 PHP 和非 PHP 开发人员似乎总是能理解我。 是的,我回到“点”,因为它完成与大多数其他语言中的点运算符相同的事情。那么问题就变成了,在 C/C++ 中,->
与实际的点运算符有不同的功能,你怎么称呼它?【参考方案6】:
属性运算符。
当大声朗读 $a->b()
或 $a->b
时,我只是说“在 $a obj 上调用 b”或“从 $a/in/of $a 获取 b”
【讨论】:
@Tor,我猜也是“方法运算符”。 @Marcus Adams - 并非如此,因为方法只是大多数语言中恰好是函数的属性。虽然仅在 PHP 中,有很大的区别,但我仍然称它为属性。【参考方案7】:我个人喜欢在口头表达我的代码时比较冗长。
例如:
$foo = new Foo();
echo $foo->bar
应该是这样的:
echo(/print) 对象 foo 的 bar 属性。
这很冗长,也更耗时,但我发现如果我有理由口头表达我的代码,那么我可能需要清楚我在传达的确切内容。
【讨论】:
【参考方案8】:回到 Cobol 'in',你会说“将 5 移到 a 中的 b”。今天的大多数语言都将事物限定在另一个方向。
但我仍会将$a->b();
读作“Call b in a”。
【讨论】:
【参考方案9】:$a->b
我称之为“$a 的参数 b”。
$a->b()
我称之为“$a 的函数 b”。
【讨论】:
【参考方案10】:单箭头可以很容易地被口头称为它对 PHP OOP 的含义:成员。因此,对于 $a->var
,您会说“对象 a 的成员变量”。
大声朗读代码时,提前阅读确实有帮助(前瞻参考,抱歉),并且知道您可能实际指的是什么。例如,让我们有以下代码:
<?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开括号,换行。缩进,['美元符号'|'对象标记'] foo等于0,分号,换行,换行。公共函数bar open-close 括号, open-brace, newline. Indent, return ['dollar-sign' | 'Object-marker'] this arrow foo, 分号, newline. Reverse-indent, close-brace, newline, reverse-indent, close-brace, newline, newline. ['dollar-sign' | 'Object-marker'] myobject 等于 new MyClass 左括号,分号,换行符。['dollar-sign' | 'Object-marker'] myobject 箭头栏开闭括号、分号、换行符。反向缩进、PHP 结束标记。"
您在哪里看到 ['美元符号' | 'Object-marker'],随便选一个你喜欢说的'$',我经常在两者之间切换,这取决于我的听众。
所以,总而言之,在 PHP 中,-> 指的是对象的成员,可以是变量、另一个对象或方法。
【讨论】:
【参考方案11】:我工作的高级 PHP 开发人员说“箭头”。
$A->B;
当他让我输入上面的内容时,他会说“美元 A 箭头 B”或 for
$A->B();
“美元 A 箭头 B 括号。”
【讨论】:
【参考方案12】:我会这样做:
//Instantiated object variable with the name mono call property name
$mono->name;
//Instantiated object variable with the name mono call method ship
$mono->ship();
在我的书(PHP Master,Lorna Mitchell)中,它被称为对象运算符。
【讨论】:
【参考方案13】:user187291已经回答了非主观问题,至于主观问题,我说“子”。例如,我会将$x->y
发音为“x sub y”——在这种情况下,“sub”是“subscript”的缩写。这更适合数组表示法; $x['y']
我也发音为“x sub y”。通常,在大声朗读代码时,我会用我的话来识别其他开发人员可以看到的一行,因此歧义尚未成为问题。我相信原因是我将结构/对象和数组视为“集合”,其元素下标为数学符号。
【讨论】:
【参考方案14】:日语对此有一个方便的助词“no”(の)。它是所有格,大致意思是“与前项有关”。
“弗雷德の獾”的意思是“弗雷德的獾”。
至少在精神上,以及在懂日语的人中,我倾向于通过将它们区分为:
$A->B(); // "Call $A's B."
C::D(); // "Call C の D."
但是,对于非日语使用者来说,将两者都读作所有格“'s”也很有效。你也可以翻转它们并使用“of”,所以“D of C”......但这有点尴尬,而且很难做到,因为它会破坏你的线性流程。
但是,如果我是口授,也许在配对编码和建议输入内容时,我会将特定字符称为“破折号大于箭头”和“双冒号”(如果我认识我的人)正在与之交谈的是一个 PHPophile,我第一次可能会称其为“paamayim nekudotayim 双冒号”,部分原因是这是一个很酷的笑话,部分原因是为了防止他们“纠正”我)。
【讨论】:
【参考方案15】:对象。所以$a->$b->$c
将是“A 对象 B 对象 c”。
【讨论】:
以上是关于什么是“->”PHP 运算符? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥错误控制运算符@不起作用,仍会输出错误,我使用的PHP版本为8.2.0?