【问题标题】:What does ’ (fancy apostrophe?) mean in PHP'(花式撇号?)在 PHP 中是什么意思
【发布时间】:2021-04-26 23:37:42
【问题描述】:

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

if ( $new_value && ’ == $old_value )
  1. && 后面的字符叫什么
  2. 它有什么作用
  3. 如何在键盘上输入,以及
  4. 最重要的是,我可以在它的位置使用什么是人类可读的并且看起来我不是在试图炫耀我对晦涩代码速记的知识?

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

【问题讨论】:

  • 启用错误报告3v4l.org/VRYMV
  • @IMSoP 令人着迷。对详细答案投赞成票。谢谢。

标签: php symbols


【解决方案1】:

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

直到 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!';
}

需要明确的是,这并不是特别有用,除非你想对某人进行恶作剧,它只是解释了一个令人惊讶的事实,即这不是语法错误。

【讨论】:

  • 太棒了!谢谢!不要认为这是一个“错误”,只是认为它是草率的旧代码......可能有人曾经逃脱过,并继续使用它,因为它节省了,什么,几次击键?
猜你喜欢
  • 2011-06-01
  • 2012-03-30
  • 2023-04-07
  • 1970-01-01
  • 2017-10-09
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多