使用两个同名的类

Oos*_*Oos 3 php conflict namespaces class

我有两个PHP应用程序,它们具有相同名称的twho类. - 带有"Project"类的app1 - 带有"Project"类的app2

我必须在第二个应用程序中使用第一个应用程序的类,但是两个带有一个名称的类会导致错误("PHP致命错误:无法重新声明类Project ...").

我不能改变类名.我必须使用PHP 5.2(PHP 5.2中没有命名空间).

有解决方案吗?

也许 :

  • 使用类Project
  • undef这个类(有点"unset Project",有可能用PHP?)
  • include()第二课
  • 使用第二课

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

小智 6

我最近遇到了这个问题,(令人尴尬的)Joomla.我需要通过加载两个"version.php"文件然后读取类属性来找到两个不同安装的版本和一个脚本.但是,当然,它们都被称为"JVersion",并且因为它而不能要求()两个 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;


Run Code Online (Sandbox Code Playgroud)

只需修改它,即可根据需要加载正确的两个文件,并根据需要重命名.对不起,你不得不等了一年多.:-)

很难相信PHP没有内置的某种"undeclare($ classname)"功能.我甚至无法使用命名空间来解决这个问题,因为这需要更改原始的两个文件.有时你只需要在框架之外思考.