_Нужно_ заранее определить функцию. Но только при реализации в JS.
Потому что jsonp вызывается через банальное добавление script src="..." в DOM. Когда приезжает ответ - он выполняется как рядовой JS. JSON парсится как рядовой JS (строго говоря поэтому тип данных на входе функции - только mixed. Объект это, строка, число, массив или просто null - проверять в самой функции). И вызывается указанная функция с таким вот неизвестно каким аргументом.
Запросом из PHP это, разумеется, не работает. PHP - это не JS. И получить надо именно JSON без внешней мишуры из вызова функции.