PHP: вызов классического статического метода с динамическим именем класса до PHP 5.3

Я работаю над проектом для устаревшей кодовой базы, используя php 5.2.6. Часть этого проекта включает в себя что-то похожее на A/B-тестирование с использованием одного класса PHP против другого. Два класса имеют много одинаковых имен функций, с очень похожими сигнатурами, но разными методами в методах. Мне интересно, возможно ли вызывать статические методы внутри классов, используя имя класса, основанное на динамике / переменной.

Например, id хотел бы установить имя класса как таковое:

$class = isset($some_condition) && $some_condition ? 'NewClassName' : 'LegacyClassName';

... а затем вызвать функции как таковые:

$class::myStaticFunction();

Я знаю, что это можно сделать с помощью call_user_func(), но у меня возникают проблемы с поиском альтернативных подходов (если таковые имеются). Я просто не хотел бы, чтобы регулярные выражения заменяли все вызовы унаследованного класса на операторы call_user_func ().

например,

$stuff = call_user_func($class . '::myStaticFunction()'); 

... работает просто отлично.

Кто-нибудь знает, есть ли более простой способ выразить: $dynamicClassName::staticFunction() с PHP 5.2? Возможно, мне что-то не хватает с моим синтаксисом и т. Д.

1 ответ

Решение

Вы можете обновить свою версию PHP. Начиная с 5.3 вы можете использовать их так, как хотите, чтобы вызывать свою функцию.

Другого пути в 5.2 нет.

Вы можете использовать это письмо, может быть, более легко читать:

$stuff = call_user_func_array(array($class, $method), array($arg1, $arg2));
Другие вопросы по тегам