有办法颠覆类重声明问题吗?没有名称空间


Any way to subvert class redeclaration issue? No namespaces

注意:我不可能重命名类或为此使用名称空间。

我在寻找任何疯狂的方法来破坏php中的类重声明问题。我实际上只需要从一个web应用程序的3个静态变量,但获得它们的唯一方法需要包括一个声明用户类的文件。但是我已经有了一个用户类,所以我得到了一个错误。

我试图将文件包含在一个类中,希望它能隔离所包含的文件,但没有。

我试着读取我创建的一个接口文件,只是回显3个值,但实际上只是读取php代码,而不是渲染值。

有没有类似光隔离系统的代码?

我唯一能想到的是使用ajax来做它,但它似乎超级粗略。有一个纯php版本吗?

(本来是评论,但是太长了)在你的限制下听起来不可行。(你可能需要显示一些代码)——但是如果你想要一个疯狂的方式,并且重命名类的选项只适用于不编辑php脚本,那么:

将include文件加载到一个变量中,然后对其进行转换,最后执行eval:

$source = file_get_contents("user.php");
$source = str_replace("class user", "class workaround_123", $source);
eval($source); // will give you a workaround_user instead of class conflict

有人可能会评论eval的可取性…但这首先取决于你的代码/情况,如果这是一个适用的古怪的解决方案。

或者,您可以使用单独的PHP进程调用用户获取代码:

exec("QUERY_STRING=user=123 php-cgi user.php");

您可以对整个文件进行标记,然后"手工"遍历以找到所需的值。