PHP期望T_PAAMAYIM_NEKUDOTAYIM?

有人有T_PAAMAYIM_NEKUDOTAYIM吗?

181418 次浏览

它是双冒号操作符::(参见解析器令牌列表)。

“双冒号”是希伯来语

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

从# EYZ0:

在PHP中,作用域解析操作符也被称为Paamayim Nekudotayim(希伯来语:פעמייםנקודתיים‎),这意味着“双冒号” 希伯来语。< / p >

“Paamayim Nekudotayim”的名字是在 以色列开发的Zend Engine 0.5,用于PHP 3。尽管它已经 对于许多不懂希伯来语的开发者来说,它仍然是一个谜 在PHP 5中使用,如示例错误消息:

$ php::解析错误:语法错误,意外 T_PAAMAYIM_NEKUDOTAYIM < / p > 从PHP 5.4开始,有关范围解析操作符的错误消息 还包括这个名字,但有点澄清了它的意思:

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

从# EYZ0:

范围解析运算符(也称为Paamayim Nekudotayim)或in 简单来说,双冒号是允许访问的标记 类的静态、常量和重写的属性或方法

当从类定义外部引用这些项时,使用 类的名称

从PHP 5.3.0开始,可以使用a来引用类 变量。变量的值不能是关键字(例如self, parent) 和静态)。< / p > Paamayim Nekudotayim乍一看是一个奇怪的选择 命名双冒号。然而,在编写Zend Engine 0.5时 (支持PHP 3),这就是Zend团队决定给它起的名字。它 实际上在希伯来语中是双冒号的意思!< / p >

当你在PHP中对empty()函数应用常量时,也会出现这种情况:

if (!empty(SOME_CONSTANT)) {


}

那是我的案子。我用这个方法解决了这个问题:

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


}

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

在PHP 5.3及以上$this::$defaults工作正常;当我把代码交换到一个服务器上时,不管出于什么原因,这个服务器的版本号更低,它抛出了这个错误。

解决方案,在我的情况下,是使用关键字self而不是$this:

self::$defaults工作得很好。

这可能发生在foreach时使用:

foreach( $array as $key = $value )

而不是

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

我很懂希伯来语,所以为了澄清“Paamayim nekudotayim”这个名字;对你来说,转述的意思是“双冒号”,但按字面翻译:

  • “Paamayim"意味着“two"或“;twice"
  • <李>“Nekudotayim"意味着“dots"(点燃。“求解,)
    • 在希伯来语中,nekuda表示一个点。
    • 复数形式是nekudot,即圆点,作为元音
    • 它被称为Nekudo-tayim的原因是因为后缀"-ayim"也表示“二”;或“两次”,因此::表示“两次,两个点”,或者更常见的是范围解析运算符

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

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

这只是发生在我的字符串赋值使用双引号。我在一个POST变量上缺少一个右花括号…

# EYZ0;

应该是

# EYZ0;

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

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