У меня есть абстрактный класс для переноса данных из одной базы данных в другую, и иногда данные, необходимые для создания основных записей, различны, из-за наличия в базе данных назначения старой таблицы, содержащей инструкции по поиску данных в источнике. Очевидно, что здесь упрощается задача:
abstract class foo { protected abstract function createBaseEntry($id); }
Иногда мне нужен только один идентификатор, передаваемый этой функции, но в некоторых случаях мне нужно передать два. Конечно, если фактическая сигнатура метода конкретного метода не соответствует абстрактному методу, PHP будет поднять фатальную ошибку и остановить выполнение. Помимо предопределения с нулевым значением максимального количества аргументов и изменения каждого конкретного класса, который расширяет этот, есть ли способ обойти это?
Вы можете использовать func_num_args()
и func_get_args()
чтобы определить количество аргументов во время выполнения, если вы не можете / не хотите менять подпись метода, чтобы иметь необязательный второй аргумент .
пример
function foo() { $num = func_num_args(); $args = func_get_args(); var_dump($num, $args); } foo(1, 2, 3);
Выход ( код )
int(3) array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
Это также будет работать, если в подписи есть аргументы.