Oos*_*Oos 3 php conflict namespaces class
我有两个PHP应用程序,它们具有相同名称的twho类. - 带有"Project"类的app1 - 带有"Project"类的app2
我必须在第二个应用程序中使用第一个应用程序的类,但是两个带有一个名称的类会导致错误("PHP致命错误:无法重新声明类Project ...").
我不能改变类名.我必须使用PHP 5.2(PHP 5.2中没有命名空间).
有解决方案吗?
也许 :
我不知道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)"功能.我甚至无法使用命名空间来解决这个问题,因为这需要更改原始的两个文件.有时你只需要在框架之外思考.
| 归档时间: |
|
| 查看次数: |
4575 次 |
| 最近记录: |