Я бы предпочел выбрать метод spl на том основании, что некоторые библиотеки, такие как Smarty, реализуют автозагрузчик spl, поэтому использование метода __autoload может привести к конфликтам.
Проверка пути внутри функции также является хорошей идеей, потому что любая функция, которая извлекает файл в вашу программу, потенциально опасна, особенно в среде с включенным allow_url_fopen! Я был бы склонен пойти с вашей функцией SPL с проверкой пути по этим причинам.
Одна оптимизация, которую я могу предложить, - сделать массив путей статическим. Это должно исключить накладные расходы на создание массива каждый раз, когда вызывается функция (хотя на самом деле такие накладные расходы в любом случае должны быть весьма незначительными)