[英]Using the Scope Resolution Operator in Laravel
我对OOP / Laravel的一个方面感到困惑。
我正在关注一个OOP教程(与Laravel无关),该教程指出,仅当您调用的方法为static时,才可以使用“范围解析运算符”。
因此,我创建了一个快速脚本;
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如何让我摆脱它呢? 我处于开发模式,所以我不知道为什么我没有看到相同的消息。
为了完全掌握这种情况的发生,这里需要理解一些相当高级的概念。
首先,这仅适用于Laravel中的外墙。 这些可以在别名数组的app.php
配置文件中找到。 这些立面中的每一个都可以被视为Laravel核心中其真实类的入口点。 因此,即使语法告诉您正在调用静态方法,但实际上发生的是Laravel将底层类解析为这些代理类,并在这些类上非静态地调用方法。
如果您去那些外观类中的一些,您会看到更好的效果,在这些类中您将看到正在调用的方法实际上不在这些类中。
要真正了解这是如何发生的,请阅读Laravel的控制容器反转(IoC),Facades的使用以及php magic方法__callStatic
和php方法class_alias
,这是Laravel用于设置别名的方法。
同样,这些概念非常复杂,因此,如果它们看起来令人困惑或目的使您望而却步,请不要气disc。
基本上,工作流程如下所示:
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
首先,您的函数不是静态的,如果要像Student::welcome_students()
那样调用它,则需要对其进行更改
public static function welcome_students($var="Hello") {
echo "{$var} students.";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.