所以我正在阅读有关PHP命名空间的内容,我意识到在早于5.3的版本中,如果你写了
namespace MyNamespace
你得到一个解析错误。
有没有办法避免这种情况,即使命名空间向后兼容,所以代码不会简单地崩溃?
答案 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");
}