Morterset
@Morterset
Программист

Как динамически поменяеть имя класса?

Если существует ли возможность динамической смены имени класса?

P.S
Это решение для очень кривой архитектуры - где разработчик не хочет использовать пространства имён ввиду того что проект насчитывает десятки тысяч классов. Как решение это динамическая замена имён классов. "Без использования eval"
  • Вопрос задан
  • 239 просмотров
Пригласить эксперта
Ответы на вопрос 5
index0h
@index0h
PHP, Golang. https://github.com/index0h
Если существует ли возможность динамической смены имени класса?

Нет, даже через runkit.

Это решение для очень кривой архитектуры

Это не решение, а усугубление проблемы.

разработчик не хочет использовать пространства имён ввиду того что проект насчитывает десятки тысяч классов.

Если проект не особо развивается, а команда состоит из 1 разработчика - то смысла в переносе на неймспейсы может и нет.

В остальном же - ничто не мешает начать перепил на найспейсы и человеческий автолоадинг помодульно. + Нормальные IDE типа PhpStorm с этим довольно быстро справляются.
Ответ написан
Комментировать
@pudovMaxim
web-developer
Есть вариант использования пространства имен для своих классов и глобальное для сторонних. Пример:
файл index.php:
<?php
namespace a;
class A {
	function hello(){
		echo "Hello, I am A with namespace\n";
	}
}

require('testB.php');
$namespacedA = new A();
$simpleA = new \A();

$namespacedA->hello();
$simpleA->hello();

?>

Файл A.php:
<?php
class A {
	function hello(){
		echo "Hello, I am A without namespace\n";
	}
}
?>


В итоге получаем:
Hello, I am A with namespace
Hello, I am A without namespace
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
разве что так.
<?php
use My_Ugly_Class_name as PrettyName;


В вашем случае не стоит менять имена классов. Как минимум если нет тестов.
Ответ написан
Комментировать
@novrm
Конечно это печально, и горе на голову тому разработчику, который отказывается от использования пространства имен...
Мне вот неймспейсов очень не хватает в CSS...
Ну да ладно...
По сути вашей проблемы - пожелаю вам держаться и терпения...
Возможно Zend-овский класс, который генерирует классы на лету вам поможет:
Zend\Code\Generator
Ответ написан
Комментировать
@shagguboy
через token_get_all можно. но это по сути маленький парсер php.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы