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));