Это большой вопрос, и я не думаю, что это легко объяснить в ответе StackOverflow.
Но в заключение, первый подход использует так называемую технику внедрения зависимостей. В Laravel Service Container - это тот, который разрешает зависимости вокруг платформы.
Так, например, если ваш класс зависит от других ресурсов, доступных во время выполнения, Service Container позаботится об их предоставлении.
А последнее - это простой объектный экземпляр, который вы делаете сами.
Например, ваш ClassA
в конструкторе имеет зависимость от другого класса:
public function __construct(ClassB $classB) {}
Затем, используя первый подход, контейнер Service попытается разрешить ClassB для вас, и, используя второй подход, вы тот, который должен обеспечить эту зависимость следующим образом:
$class = new ClassA(new ClassB);
Надеюсь, это немного проясняет ситуацию, хотя, как я уже говорил, это большой вопрос.