’(花式撇号?)在 PHP 中是什么意思

What does ’ (fancy apostrophe?) mean in PHP

我得到了这个例子PHP代码:

if ( $new_value && ’ == $old_value )
  1. &&
  2. 之后的字符叫什么
  3. 它有什么作用
  4. 如何在我的键盘上输入它,
  5. 最重要的是,我可以用什么来代替人类可读的地方,并且看起来不像我在试图炫耀我对晦涩代码的了解shorthand?

我在这里找不到它:Reference — What does this symbol mean in PHP? 并且由于 Google 忽略了它,并且大多数其他搜索将 视为与 '(撇号)相同空空如也。

这个字符在 PHP 中没有特殊含义,可能只是您正在阅读的代码中的一个错误。例如,它可能原本打算作为 ''(一个空字符串),但被一些 markdown 风格的格式化系统弄乱了。

在 PHP 8.0 之前,由于两个稍微奇怪的功能的组合,它实际上不会产生错误:

  • 任何可能是有效常量名称但当前未定义为常量的名称都将被视为字符串,就好像您使用与名称相同的值定义常量一样。此功能已在 PHP 8.0 中删除。
  • 变量或常量名称中允许使用 7 位 ASCII 之外的任何字节(即值 128 到 255),即使在开头也是如此。由于这个字符不在 ASCII 中,它将使用一堆符合此规则的字节以 UTF-8 呈现 - 请注意 PHP 实际上并不关心它们在 UTF-8 中的含义,它只是看到它们是非 ASCII 格式的,您可以在任何地方使用它们。

结果是 ’ == $old_value 实际上被解释为 '’' == $old_value,即“$old_value 是否匹配包含字符 的字符串?”

在 PHP 8.0 中,不再允许这种解释,您将在运行时收到常量未定义的错误。但是,您实际上可以定义此常量,并且 the code will run on all PHP versions from 4.3 up to and including 8.0 完全没有任何错误或警告:

<?php

// Define our oddly-named constant to have a value of 'hello'
define('’', 'hello');

// Compare it against a normal string variable
$foo = 'hello';

if ( ’ == $foo ) {
    echo 'It works!';
}

需要说明的是,这不是特别有用,除非你想对某人开个玩笑,它只是解释了一个令人惊讶的事实,即这不是语法错误。