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

时间:2010-05-25 20:39:46

标签: php

所以我正在阅读有关PHP命名空间的内容,我意识到在早于5.3的版本中,如果你写了

namespace MyNamespace

你得到一个解析错误。

有没有办法避免这种情况,即使命名空间向后兼容,所以代码不会简单地崩溃?

4 个答案:

答案 0 :(得分:4)

简答:不。

更长的答案:(添加以从其他已删除的答案中捕获有用信息)。新的语法将导致PHP中的解析错误,因此您不能使用客户错误处理程序来捕获版本中生成的错误< 5.3。从理论上讲,你可以编写预处理器扫描和/或对源进行lex / parse,然后写出与PHP 5.2兼容的东西,但这会产生比它解决的问题更多的问题。

答案 1 :(得分:0)

也许您可以查询正在使用的PHP版本,如果它足够高,则调用eval。我不知道这是否会奏效。

答案 2 :(得分:0)

实际上,我认为这是可能的,但我不相信这是值得的。我们的想法是创建一个自定义默认stream wrapper,它将根据新语法解析PHP文件并对语法进行适当的更改,以使其有效PHP< 5.3。

包装器必须将Foo\Bar\Baz等类名替换为Foo_Bar_Baz。目前我不确定是否有什么东西会让这个变得不可能。

无论如何,我不相信这是值得的。升级到PHP 5.3。

哦,这意味着包装器代码应该与PHP兼容< 5.3。

答案 3 :(得分:0)

我知道这是一个非常老的问题,但是我需要编写一些指令,使命名空间向后兼容非常老的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");
}