PHP需要T_PAAMAYIM_NEKUDOTAYIM?


542

有人有T_PAAMAYIM_NEKUDOTAYIM吗?


22
有时,这是PHP告诉您缺少$符号的方法……例如,如果您编写_SESSION [“ foo”]而不是$ _SESSION [“ foo”]
奇闻趣事2012年

131
希伯来语用于双双冒号,但是...请参见bugs.php.net/bug.php?id=14492:“顺便说一句,解析错误中存在拼写错误,应该是T_PAAMAYIM_NEKUDATAYIM(希伯来语中为“ double”形式只是原始名词+'ayim'后缀,'nekuda'是单一形式['nekudot'是复数形式])”。
Wolfgang Fahl 2012年

66
@WolfgangFahl我知道有关该错误的一些信息似乎不对。
彼得·特纳

14
@WolfgangFahl只是拼写错误而已u。应该是T_PAAMAYIM_NEKUDOTAYIM。(PAAMAYIM=“ twice”,NEKUDOTAYIM= :=“נקודותיים”)
汤姆

15
当我看到此错误时,我只是盯着屏幕傻了约30秒钟,然后突然大笑起来,抽着烟:F 1+
n00b

Answers:


342

它是双冒号运算符::(请参阅解析器标记列表)。


11
并不是的。测试一下var_dump(empty(TRUE))
machineaddict 2014年

1
@machineaddict错误/答案?
Gumbo 2014年

2
否。我刚刚添加了一个评估,该评估返回了相同的T_PAAMAYIM_NEKUDOTAYIM。我发现它是错误的。
machineaddict

6
@Web_Developer,发生这种情况的原因是,如果foreach($cats as catcat语法上有效的语句的后面只有一个唯一可接受的字符是::,因为它将允许您指定称为的某个类的静态属性cat。例如,如果catclass具有一个称为的公共静态成员$mouse,则foreach($cats as cat::$mouse)完全有效php,但除::之后的其他任何语句都cat将构成语法错误。如果$mouse不是cat您声明的属性,则会出现致命错误,但仍然不是语法错误。
chiliNUT

2
var_dump(empty(TRUE)),只是在PHP 7.2中返回bool(false)
程序员Dancuk


53

它是::PHP中运算符的名称。它的字面意思是“双冒号”。由于某种原因,他们用希伯来语命名。检查您的代码语法,并::在适当的地方放置:-)


1
函数使用英语,但是该错误使用希伯来语。我不确定希伯来语中是否还有其他错误。
alex

19
高亮字符串是להדגישמחרוזת。从现在开始,我将只使用希伯来语字符自定义array_push函数לדחוף_מערך。我确信我所有非希伯来语的同事都会喜欢它。我们的开发团队几乎都讲至少一种用非拉丁字符编写的语言。应该很有趣:)
Isaac

3
之所以使用希伯来语,是因为该代码是由以色列人编写的。我不认为他们会遗漏该错误,而是将其留在那儿作为提醒。
劳尔

5
@Raul好的,所以在我的下一个项目中,我将用意大利语编写一些错误代码,我是意大利语!您期望什么,到处都是英语?:-)
Gianluca Ghettini 2015年

@Ilya Birman字面意思不是“双冒号”;它的字面意思是“两次,双点”
Sapphire_Brick

47

来自维基百科

在PHP中,范围解析运算符也称为Paamayim Nekudotayim(希伯来语:פעמייםנקודתיים),在希伯来语中意为“双冒号”。

在以色列开发的PHP 3中使用的Zend Engine 0.5中引入了“ Paamayim Nekudotayim”这个名称。尽管它使许多不讲希伯来语的开发人员感到困惑,但仍在PHP 5中使用了此错误消息示例中的内容。 :

$ php -r ::解析错误:语法错误,意外T_PAAMAYIM_NEKUDOTAYIM

从PHP 5.4开始,有关范围解析运算符的错误消息仍包含此名称,但已在某种程度上阐明了其含义:

$ php -r ::解析错误:语法错误,意外的'::'(T_PAAMAYIM_NEKUDOTAYIM)

官方的PHP文档中

范围解析运算符(也称为Paamayim Nekudotayim),或更简单地说,是双冒号,是一个令牌,它允许访问类的静态,常量和重写属性或方法。

从类定义之外引用这些项目时,请使用类的名称。

从PHP 5.3.0开始,可以使用变量来引用类。变量的值不能是关键字(例如self,parent和static)。

起初,Paamayim Nekudotayim对于命名双冒号似乎是一个奇怪的选择。但是,在编写Zend Engine 0.5(支持PHP 3)时,Zend团队决定将其称为。它实际上确实意味着双冒号-在希伯来语中!


1
它实际上是希伯来语。维基百科现在说:“在PHP中,作用域解析运算符也称为Paamayim Nekudotayim(希伯来语:פעמייםנקודותיים,发音为[paʔaˈmajim nəkudoˈtajim],第二个单词是נקודתיים的口语化腐败,发音为[nə]冒号) “在希伯来语中。”
麦克风

11

当您将PHP中的常量应用于empty()函数时,也会出现这种情况:

if (!empty(SOME_CONSTANT)) {

}

那是我的情况。我通过使用以下方法解决了它:

$string = SOME_CONSTANT;
if (!empty($string)) {

}

2
为什么常量为空?
不要惊慌

1
好的问题:例如,如果其他人遇到这种错误情况,我只是表明这也是可能的:)
Max

6
@不要惊慌:为什么不呢?empty()不仅测试变量是否存在,还测试其值是否为“空”(在PHP中,零(0)也为空)。这样的常数可能表示一个要由用户更改的值,例如DB设置或某些true / false值以及代码开发人员在设计时不知道的其他值类型。这在API或代码框架中很常见。我只是不明白为什么Zend解析器的开发人员没有使用每个人都知道和理解的通用词,而是使用了一些希伯来语词。我的意思是,它甚至还不是很有趣。
StanE

我在配置文件中使用常量,我想在代码中知道特定常量是否为空(null,false,0,空字符串,emty数组...。)。我应该手动对所有这些进行测试吗?WTF
qdev

5

我非常了解希伯来语,因此为您澄清名称“ Paamayim Nekudotayim”,释义为“双冒号”,但直译为:

  • “ Paamayim”是指“两个”或“两次”
  • “ Nekudotayim”的意思是“点”(点亮的“孔”)
    • 在希伯来语中,nekuda表示一个点。
    • 复数形式为nekudot,即英语中像元音一样起作用的点。
    • 之所以称为Nekudo- tayim,是因为后缀“ -ayim”也表示“两个”或“两次”,但通常表示两个对象而不是两个动作,因此::表示“两次,两个点”或更多通常称为范围解析运算符

2

在使用以下方法时,这可能会在foreach上发生:

foreach( $array as $key = $value )

代替

foreach( $array as $key => $value )

1

对我来说,这是在类函数中发生的。

在PHP 5.3及更高版本中$this::$defaults运行良好;当我将代码交换到由于任何原因而具有较低版本号的服务器时,都会引发此错误。

就我而言,解决方案是使用关键字self而不是$this

self::$defaults 效果很好。


他有$this,或者你怎么了怎么了?
Sapphire_Brick
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.