PHP 命名空间别名的工作方式很奇怪


PHP namespace aliasing works strangely

今天早上我遇到了一个关于PHP命名空间的问题,我的一个朋友问我是否知道出了什么问题,但我不确定。我不记得整个代码片段,但基本上这个简短的片段让我感到困惑:

try {
   echo "A";
   $bootstrap = new 'Test'Built'Framework'Bootstrap;
   echo "B";
} catch (Exception $e) {
    echo $e->getMessage();
    throw $e;
}

当脚本执行时,我可以看到"A"被打印出来,但没有"B",因为没有发现错误(也没有抛出异常)。

由于我对 PHP 命名空间并不熟悉,我只有 2 个问题:

  1. 代码不打印"B"或错误有什么问题?
  2. $bootstrap = new 'Test'Built'Framework'Bootstrap;实际上做了什么?它是如何加载的?

可能找不到类'Test''Built''Framework''Bootstrap',并且php display_errors设置为Off

这就是为什么错误消息

Fatal error: Class 'Test'Built'Framework'Bootstrap' not found in ...

它没有印在场景中。脚本回显 A 并退出并出现致命错误。

代码

$bootstrap = new 'Test'Built'Framework'Bootstrap;

从类创建新对象

<?php namespace Test'Built'Framework;
class Bootstrap {}
?>

要在脚本中使用 Bootstrap 类,您必须专门包含它或使用自动加载器。