PHP 似乎将 null 定义为自身。这是如何运作的?

Clo*_*kex 4 php null

我的一个同事通过null在 PHPStorm 中按住ctrl 单击发现,PHP 定义null

define ('null', null, true);
Run Code Online (Sandbox Code Playgroud)

core_d.php

  1. 为什么 PHP 需要定义 null 呢?
  2. 这甚至是如何工作的?它如何定义null为自己?

到目前为止,我最好的理论是可能null已经定义了,但是define可以这么说,使用允许添加不区分大小写的别名。我对 PHP 的了解不够,无法判断这种可能性。

Kaa*_*aan 9

core_d.php属于 PHPStorm 而不是 PHP 本身。查看github上的文件。PHP 几乎完全是用 C 编写的。该文件的存在可能是为了帮助了解代码和静态分析。从存根回购自述文件

STUBS 是正常的、语法正确的 PHP 文件,包含所有内置 PHP 内容和大多数标准扩展的函数和类签名、常量定义等。存根需要包含完整的 PHPDOC,尤其是正确的 @return 注释。

IDE 需要它们来完成、代码检查、类型推断、文档弹出等。大多数这些服务的质量取决于存根(基本上是它们的 PHPDOC @annotations)的质量。

但是,正如Bartosz Zasada所指出的,php 确实定义了一个名为 null 的常量。它目前在.php 末尾的 php 源代码的第137 行中ext/zend/zend_constants.c定义zend_register_standard_constants()