使用Laravel中的范围解析运算符

时间:2015-05-01 12:56:07

标签: php oop laravel

我对OOP / Laravel的一个方面感到困惑。

我遵循OOP教程(与Laravel无关),声明只有在您调用的方法静态时才能使用范围解析运算符。

所以我创建了一个快速脚本;

class Student { 
  function welcome_students($var="Hello") {
    echo "{$var} students.";
  }  
}
echo Student::welcome_students("Greetings") ."<br />";

我得到了错误;

Strict Standards: Non-static method Student::welcome_students() should
not be called statically in /static_modifier.php on line 11 Greetings students.

但是在Laravel 5中,我注意到我一直在使用像

这样的电话
`ClassName::whereIn($var = `

在我的很多控制器中。我已经检查了存储whereIn方法的包裹,但它不是static。它只是public function

那么Laravel 5如何让我逃脱它?我处于开发模式,所以我不知道为什么我没有看到同样的消息。

1 个答案:

答案 0 :(得分:4)

这里有一些相当先进的概念需要被理解才能完全掌握这种情况的发生。

首先,这只适用于Laravel的外墙。这些可以在别名数组中的app.php配置文件中找到。这些立面中的每一个都可以被认为是Laravel核心中真实类的入口点。因此,即使语法告诉您正在调用静态方法,Laravel正在解决这些代理类的基础类,并在这些类上非静态地调用方法。

如果你去一些门面类,你会看到你正在调用的方法实际上并不存在于这些类中,你可以更好地看到这一点。

要真正理解这是如何发生的,请阅读Laravel的控制容器(IoC)反转,Facade的使用,php魔术方法__callStatic以及php方法{{1这是Laravel用于设置别名的内容。

同样,这些都是相当复杂的概念,所以如果它们看起来令人困惑或目的无法实现,请不要气馁。

基本上,工作流程看起来像这样......

        
  1. 您调用Config :: get()
  2.     
  3. Laravel查找Config的别名,这是一个外观。
  4.     
  5. 使用__callStatic魔术方法,Facade计算出要实例化的基础类,并以非静态方式调用相应的方法。
  6. http://laravel.com/docs/5.0/facades#explanation

    http://laravel.com/docs/4.2/ioc#introduction

    http://php.net/manual/en/language.oop5.overloading.php#object.callstatic