Facades are used to facilitate reading and using interactions with classes. This makes the code seem like you are using a bunch of static methods to interact with the class without creating it when you actually call the methods on an existing object.
Dependency injection is used, as the name implies, to introduce class dependencies into a class. This is done through the constructor. You introduce classes in another class to allow the class to use the functionality from the classes you entered. This becomes powerful when you start introducing an interface into a class. Then you can create a class based on the interface and enter it into the class. Thus, if you need to change the way the embedded class works, you can create a new class based on the interface and enter it. Since your code is based on an injected interface, it ensures that the class that received the injections continues to work unchanged.
This is most noticeable in Laravel 4 if you are creating an interface-based repository for the Eloquent engine. You can enter this repository into the controller and use the methods on the interface to get the necessary information. then if you ever want to switch to something like Redis, all you have to do is create a new class based on this interface that uses the Redis engine instead, and then introduce this class. The controller will never need to be changed.
source share