我们有以下php脚本MySpace/Scaffold.php
:
#!/usr/bin/env php
<?php
namespace Playground\MySpace; // <-- IT FAILS HERE
…
?>
并将其包含在其他脚本中,
require_once("MySpace/Scaffold.php");
失败并
PHP致命错误:命名空间声明语句必须非常 第一个语句或脚本中的任何声明调用之后 ... /第3行上的PHP / playground / src / MySpace / Scaffold.php
我浏览了php.net上的官方文档,但找不到解释。
当我用#!
shebang删除第一行时,它开始正确包含它。
为什么PHP自首次打开<?php
标记以来就不对语句进行计数?
为什么还要打扰上面的非PHP内容呢?
当namespace Playground\MySpace;
是php代码中的第一条语句时,为什么PHP解释器(7.2.7,Zend Engine v3.2.0)失败并出现上述错误?
答案 0 :(得分:0)
如您所见here,该sheebang命令是在从命令行中执行脚本时使用的。
在Unix系统上,特殊的#! (或“ shebang”)第一行应添加到PHP脚本中,以便系统可以自动判断哪个程序应运行该脚本。
因为从服务器上执行php并不是必需的,所以实际上并不会分析此命令,并且会在结果文件中打印此文本(就像第一个开始标记之前的所有HTML文本一样)。 (您可以在IDE中检查一下,该行可能显示为纯文本) 因为PHP已经输出了某些内容,所以他抱怨设置名称空间。
答案 1 :(得分:0)
在PHP manual的命名空间部分中缺少以下声明:
此外,任何非PHP代码都不能在名称空间声明之前,包括多余的空格:
示例#2声明一个名称空间
<html>
<?php
namespace MyProject; // fatal error - namespace must be the first statement in the
script
?>
此外,与任何其他PHP构造不同,可以在多个文件中定义相同的名称空间,从而允许在文件系统中拆分名称空间的内容。
就是这样。只是不支持的功能。
给您带来的不便,我们深表歉意。只是习惯了不同风格的文档。