使名称空间在PHP中向后兼容
所以我读了一些关于PHP名称空间的文章,我意识到在5.3之前的版本中使名称空间在PHP中向后兼容,php,Php,所以我读了一些关于PHP名称空间的文章,我意识到在5.3之前的版本中 namespace MyNamespace 您会得到一个解析错误 有没有办法避免这种情况,即使名称空间向后兼容,这样代码就不会简单地崩溃?简短回答:没有 较长的答案:(添加以从其他已删除的答案中捕获有用信息)。新语法将导致PHP中的解析错误,因此您不能使用客户错误处理程序来捕获
namespace MyNamespace
您会得到一个解析错误
有没有办法避免这种情况,即使名称空间向后兼容,这样代码就不会简单地崩溃?简短回答:没有
较长的答案:(添加以从其他已删除的答案中捕获有用信息)。新语法将导致PHP中的解析错误,因此您不能使用客户错误处理程序来捕获<5.3版本中生成的错误。理论上,您可以编写一个预处理器,对源代码进行扫描和/或执行lex/parse,然后写一些与PHP5.2兼容的东西,但这会产生比它解决的问题更多的问题。也许您可以查询正在使用的PHP版本,如果足够高,可以调用eval。不过我不知道这是否行得通。事实上,我认为这是可能的,但我认为这不值得。我们的想法是创建一个自定义默认值,它将根据新语法解析PHP文件,并对语法进行适当的更改,使其成为有效的PHP<5.3 包装器必须用
Foo\Bar\Baz
替换类名称,例如Foo\Bar\Baz
。目前我不确定是否有什么东西会让这变得不可能
无论如何,我认为这不值得努力。升级到PHP5.3
哦,这意味着包装器代码应该与PHP<5.3兼容。我知道这是一个非常老的问题,但我需要使两个名称空间指令与非常旧的PHP安装(5.2)向后兼容 为了避免分析错误,我最终做了以下工作:
if(version_compare(PHP_VERSION, '5.3.0') >= 0) {
include("file_with_namespaces_code.php");
}
else{
echo("put php 5.2 code here");
}
您正在描述向前兼容性。问题是如何使新代码与旧版本的PHP一起工作。听起来像是向后兼容…问题是如何让旧版本的PHP运行用于新版本的代码。这就是前向兼容性。@回声:你不考虑问蓝光电影(命名空间)是否可以和DVD播放器(旧PHP版本)一起工作,询问前向兼容性:“问题是如何使新代码与PHP的旧版本一起工作。”向后兼容性使旧代码与新版本的PHP兼容。我认为这是行不通的。名称空间在编译时解析,而eval在运行时解析……我认为它可以执行某些编译时魔法,这就是为什么不能从变量函数调用它。