617

有人有T_PAAMAYIM_NEKUDOTAYIM吗?

4

11 回答 11

367

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

于 2009-02-26T20:36:31.750 回答
122

它是希伯来语的“双冒号”。

于 2009-02-26T20:37:17.037 回答
57

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

于 2009-02-26T20:37:22.140 回答
52

来自维基百科

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

“Paamayim Nekudotayim”这个名称是在 PHP 3 中使用的以色列开发的 Zend Engine 0.5 中引入的。虽然它让许多不会说希伯来语的开发人员感到困惑,但它仍然在 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 团队决定这样称呼它。它实际上确实意味着双冒号 - 在希伯来语中!

于 2014-03-13T20:52:40.517 回答
14

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

if (!empty(SOME_CONSTANT)) {

}

那是我的情况。我用这个解决了它:

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

}
于 2014-11-21T21:19:26.417 回答
13

我非常了解希伯来语,所以为了澄清“Paamayim Nekudotayim”这个名字,解释的意思是“双冒号”,但字面意思是:

  • “Paamayim”的意思是“两个”或“两次”
  • “Nekudotayim”的意思是“点”(字面意思是“洞”)
    • 在希伯来语中,nekuda的意思是一个点。
    • 复数是nekudot,即点,用作元音
    • 之所以称它为 Nekudo- tayim,是因为后缀“-ayim”也表示“两次”或“两次”,因此::表示“两次,两个点”,或更常见的范围解析运算符
于 2019-12-10T03:26:39.247 回答
3

使用时,这可能发生在 foreachs 上:

foreach( $array as $key = $value )

代替

foreach( $array as $key => $value )
于 2018-10-08T09:21:59.980 回答
2

编辑:不幸的是,从 PHP 8.0 开始,答案不是“不,不再是”。这个 RFC没有像我希望的那样被接受,建议T_PAAMAYIM_NEKUDOTAYIM改为T_DOUBLE_COLON; 但被拒绝了。

注意:出于历史目的,我保留此答案。实际上,由于 RFC 的创建和某个时候的投票率,我创建了这个答案。另外,我保留它是为了希望它在不久的将来被接受。

于 2020-06-26T08:37:16.840 回答
1

对我来说,这发生在一个类函数中。

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

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

self::$defaults工作得很好。

于 2016-07-12T05:29:33.717 回答
0

这只是在使用双引号的字符串赋值中发生在我身上。我错过了一个 POST 变量的结束卷曲......

"for {$_POST['txtName'] on $date";

本来应该

"for {$_POST['txtName']} on $date";

我无法解释为什么。我的意思是,我看到了会破坏代码的错误,但我不明白为什么它引用了类错误。

于 2020-09-25T10:17:47.993 回答
-2

这只是在 foreach 循环中发生在我身上。我无意中输入($array as $key as $value)了第一个,PHP 反对as

于 2020-12-09T10:17:59.337 回答