2014-09-03 5 views
0

Я пытаюсь создать модель Eloquence. Функции класса Eloquence являются статическими, но они используют переменную non-static $ table как переменную, чтобы указать класс модели. Как можно использовать нестатическую переменную в статической функции?Laravel like model

Редактировать 1: Поэтому, если я хорошо понимаю, функции фактически не статичны, а другая функция создает новый статический экземпляр этой нестатической функции. Итак, теперь я хотел бы знать, как это сделать, не используя laravel?

+0

Этот ответ будет охватывать то, что вы хотите знать: http://stackoverflow.com/questions/24473243/php-oop-how-to-assign-not-static-property-to-static-method/24481967#24481967 – Marty

ответ

1

Под капотом, Элегантные методы прокси-класса, например, методы.

Пример:

class Model { 
    public static function __callStatic($method, $arguments) 
    { 
     // create an instance of this model 
     $instance = new static; 

     // dynamically call instance method, with the same arguments 
     return call_user_func_array(array($instance, $method), $arguments); 
    } 
} 

Взгляните на реальный Eloquent\Model реализации.

0

Вы сказали The Eloquence class's functions are all static, но это неправда. Вместо этого он использует вызовы метода статического стиля, и это было возможно из-за классов Laravel Facade.

Взятые Из документации Laravel по:

фасады обеспечивают «статический» интерфейс для классов, которые доступны в IoC контейнера приложения. Laravel поставляется со многими фасадами, и вы, вероятно, использовали их, даже не зная об этом! Laravel «Фасады» служат в качестве «статических прокси» для базовых классов в контейнере IoC , что обеспечивает преимущество кратковременного выразительного синтаксиса, в то время как поддерживает большую тестируемость и гибкость, чем традиционные статические методы .

Ваш вопрос How is that possible to use a non-static variable in a static function? Надеюсь, у вас есть ответ. Чтобы получить более четкое представление, прочитайте explanation на сайте Laravel.