Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使名称空间在PHP中向后兼容_Php - Fatal编程技术网

使名称空间在PHP中向后兼容

使名称空间在PHP中向后兼容,php,Php,所以我读了一些关于PHP名称空间的文章,我意识到在5.3之前的版本中 namespace MyNamespace 您会得到一个解析错误 有没有办法避免这种情况,即使名称空间向后兼容,这样代码就不会简单地崩溃?简短回答:没有 较长的答案:(添加以从其他已删除的答案中捕获有用信息)。新语法将导致PHP中的解析错误,因此您不能使用客户错误处理程序来捕获

所以我读了一些关于PHP名称空间的文章,我意识到在5.3之前的版本中

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在运行时解析……我认为它可以执行某些编译时魔法,这就是为什么不能从变量函数调用它。