在使用和学习laravel
的过程中,总会看到类似与static::methods
或者static::variable
的使用方式,对此感觉到疑惑和不解,后来查阅了相关的资料才知道他是php5.3之后新加入的语法,叫做静态绑定。它可以在运行时,实时的跟当前的类挂钩,这么说可能有点不理解,还是直接上代码吧,看一下他跟self
的区别。
<?php
class Fruit
{
public static function echoName()
{
echo "fruit".PHP_EOL;
}
public static function selfName()
{
self::echoName();
}
public static function staticName()
{
static::echoName();
}
}
class Banana extends Fruit
{
public static function echoName()
{
echo "banana".PHP_EOL;
}
}
Banana::selfName();//fruit
Banana::staticName();//banana
查看输出之后,才知道差别,self主要是在那个类里面编写,就绑定的哪个类,但是static则不是,他是跟当前类绑在一起的,是你用哪个类就调用哪个类的方法。