Большинство MVC-фреймворков делают много закулисной магии для вас, и это, вероятно, то, что вы запутали в том, как все работает.
Чтобы ответить на ваш первый вопрос, большинство фреймворков используют файл .htaccess с правилом перезаписи, который перенаправляет весь трафик на ваш контроллер. Итак, когда вы запрашиваете search.php, он на самом деле вызывает контроллер, а не search.php. Оттуда контроллер может посмотреть на то, что вы изначально запрашивали (в данном случае search.php), чтобы выяснить подходящую модель и представление.
Я полагаю, что ответ на ваш второй вопрос заключается в том, что он автоматически загружает файлы по мере необходимости. Это еще одно волшебство, когда он может посмотреть на имя класса, выяснить местоположение файла и загрузить его. Вы можете прочитать больше об этом в руководстве по PHP.
http://php.net/manual/en/language.oop5.autoload.php
Чтобы ответить на ваш последний вопрос, получение запрашиваемой информации часто обрабатывается контроллером, когда он просматривает запрос. Например, если вы запросите «example.com/blog/7263», он выяснит, что вам нужна модель «блога» и номер идентификатора 7263. В зависимости от того, какую платформу вы используете, способ ее настройки будет другим.
Надеюсь, это немного поможет.