Laravel4: llamar al método estático del objeto de clase instanciado

El modelo Eloquent normalmente se usa de la siguiente manera:

class Article extends Eloquent
{
//Eloquent Article implementation
}

class MyController extends BaseController
{
 public function getIndex()
 {
  $articles = Article::all();//call static method

  return View::make('articles.index')->with('articles', $articles);
 }
}

Pero al reestructurar el uso de Dependency Injection, se ve así:

interface IArticleRepository
{
 public function all();
}

class EloquentArticleRepository implements IArticleRepository
{
 public function __construct(Eloquent $article)
 {
  $this->article = $article;
 }

 public function all()
 {
  return $this->article->all();//call instance method
 }
}

So why we can call the static method Article::all() in form of instance method $this->article->all()?

P/S: Perdón por mi mal inglés.

0
Cambiar public function all() a static public function all()
agregado el autor Colin Schoen, fuente

1 Respuestas

Buena pregunta.

Laravel utiliza el patrón de diseño Facade . cuando llama a Article :: all() , sucedieron muchas cosas detrás de la pantalla. En primer lugar, PHP intenta llamar al método estático si falla. PHP llama inmediatamente a un método mágico _callStatic . luego Laravel captura inteligentemente la llamada estática y crea una instancia de la clase original.

De Laravel doc:

Las fachadas proporcionan una interfaz "estática" para las clases que están disponibles en el contenedor IoC de la aplicación. Laravel se envía con muchas fachadas, ¡y probablemente las haya usado sin siquiera saberlo!

Más información:

http://laravel.com/docs/facades

http://usman.it/laravel-4-uses-static-not- verdadero/

0
agregado
agregado el autor Manuel Pedrera, fuente
Gracias por responderme. En mi opinión, Facade hace referencia a la clase principal de Laravel, no a los modelos Eloquent creados por el usuario. Revisé en Illuminate \ Database \ Eloquent \ Model.php (que es alias Eloquent) y vi que all() se define aquí como método estático. ¿Me equivoco?
agregado el autor user3110126, fuente
PHP - Comunidad española
PHP - Comunidad española
6 de los participantes

En este grupo hablamos de PHP. Partner: es.switch-case.com