Зачем в php передавать в метод название класса аргумента?
Это называеться Dependency Injection, в скобках вы передаёте объект, который будете использовать внутри класса.
Если объект передан через __construct(Guard $auth), как у вас в коде, значит можно будет использовать данный класс в каждом методе. Если вам нужно использовать класс только один раз, вы можете передать нужный класс методу, вместо public function __construct(Guard $auth) {}, public function myMethod(Guard $auth) {}
Передача второго параметра может быть такой:public function myMethod(Guard $auth, $id) {}
или такой:public function myMethod($id, Guard $auth) {}
Laravel сам знает что где
Это называется DI — Dependency Injection. laravel.com/docs/5.1/container#introduction