gpt4 book ai didi

php - 使用两个同名的类

转载 作者:可可西里 更新时间:2023-11-01 00:07:10 26 4
gpt4 key购买 nike

我有两个 PHP 应用程序,它们具有同名的两个类。 - 具有“项目”类的 app1 - 带有“项目”类的 app2

我必须在第二个应用程序中使用第一个应用程序的类,但是同名的两个类会导致错误(“PHP fatal error :无法重新声明类项目 ...”)。

我无法更改类名。我必须使用 PHP 5.2(PHP 5.2 中没有命名空间)。

有解决办法吗?

可能是:

  • 使用类项目
  • undef 这个类(类似于“unset Project”,用 PHP 可行吗?)
  • include() 第二类
  • 使用二等舱

我不知道用 PHP 是否可行(没有找到任何关于此的资源)而且我不知道有更好的方法来管理这个...

最佳答案

我最近遇到了这个问题,(尴尬地)Joomla。我需要通过一个脚本找到两个不同安装的版本,方法是加载它们的两个“version.php”文件,然后读取类属性。但是,当然,它们都被称为“JVersion”,因此不可能 require() both version.php 文件。

经过深思熟虑,我意识到 eval() 可以代替 require()。所以我只是读入 version.php 文件的内容并更改类的名称,然后 eval() 该文本,然后我可以访问两个具有不同名称的类。我打赌你会想要一些代码。这就是我最终得到的......



$v15_txt=file_get_contents($old_dir.'/libraries/joomla/version.php');
$v15_txt=preg_replace('/class JVersion/i', 'class JVersion15', $v15_txt);
eval('?>'.$v15_txt);
$jvold=new JVersion15;
$old_version = $jvold->RELEASE.'.'.$jvold->DEV_LEVEL;

$v25_txt=file_get_contents($new_dir.'/libraries/cms/version/version.php');
$v25_txt=preg_replace('/class JVersion/i', 'class JVersion25', $v25_txt);
eval('?>'.$v25_txt);
$jvnew=new JVersion25;
$new_version = $jvnew->RELEASE.'.'.$jvnew->DEV_LEVEL;


只需对其进行修改,以便它根据您的需要加载正确的两个文件,并根据需要重命名它们。抱歉让您等了一年多。 :-)

很难相信 PHP 没有某种内置的“undeclare($classname)”函数。我什至不能用命名空间解决这个问题,因为这需要更改原来的两个文件。有时,您只需要在框架之外思考。

关于php - 使用两个同名的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4555186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com