У меня недавно была эта проблема с (смущающе) 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;
Просто измените его, чтобы он загружал два нужных файла для ваших нужд и переименовывал их по мере необходимости.Извините, что вам пришлось ждать более года.: -)
Трудно поверить, что в PHP нет встроенной функции undeclare ($ classname).Я даже не мог решить эту проблему с помощью пространства имен, потому что для этого нужно изменить исходные два файла.Иногда тебе просто нужно думать вне рамок.