Как заставить php вызывать __call если статический метод вызван динамически?
У меня есть небольшой класс для работы со строками, все методы в нем статические и принимают как первый аргумент строку. Нужно сделать возможность создания экземпляра класса, чтобы потом писать что-то наподобие $stringHelper->offset(3);
вместо StringHelper::offset($str, 3);
То есть оставить все также, но сделать маршрутизацию методов через __call. Я сделал маршрутизацию написал тесты и ничего не работает. Как я понял php не вызывает __call, а просто выполняет статический метод. Можно как нибудь заставить пхп использовать __call.
Вы видимо меня не так поняли, у меня все методы статические, то есть __callStatic не нужен, а нужно сделать что-то наподобие переброса с динамических методов на статические. При этом имена у этих методов будут одинаковые, сама маршрутизация сделана, но пхп не вызывает метод __call.
Можно сделать все основные методы приватными, объявить __call, объявить __callStatic и в них уже всё разруливать.
Но все эти костыли и магия так себе конечно.
Видел подобные решения и для других проблем, но че то не особо хочу это делать, потому что у меня маршрутизация на регулярках (там вначале вообще для именно различных шаблонов имен, а не для простой переадресации). Плюс на скорость повлияет скорее всего, вызывать два метода вместо одного придется. Никогда не понимал, зачем в пыхе сделана эта вещь с встроенной переадресацией динамических методов на статические.
TostPOST, Не знаю что у Вас там за методы в этом классе, но по-моему Вы каким-то велосипедостроительством занимаетесь. Всё уже давно придумано packagist (string helper)
А насчёт вызова двух методов вместо одного, это экономия на спичках.