博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过static关键词来实现late static binding(静态调用绑定)
阅读量:7168 次
发布时间:2019-06-29

本文共 1416 字,大约阅读时间需要 4 分钟。

本文来自pilishen.com----; 欢迎来和pilishen一起学习php&Laravel;学习群:109256050

该篇属于这一课程《laravel底层核心概念解析》这一章的扩展阅读。由于要真正学好laravel底层,有些PHP相关的知识必须得了解,考虑到学员们的基础差异,为了避免视频当中过于详细而连篇累牍,故将一些laravel底层实现相关的PHP知识点以文章形式呈现,供大家预习和随时查阅。

不讲理论!不讲理论!不讲理论!(重要的事情说三遍)

  1. class A中,定义一个static method(静态方法或者说类方法) who()
  2. 通过__CLASS__来输出调用该方法的class name,
  3. 又定义了一个静态方法test(),
  4. 通过self关键词来调用who()

这个时候我们执行A::test(),那么肯定会输出A.

现在呢,我们再创建一个class B,让它去扩展A:

class B extends A {    public static function who() {        echo __CLASS__;    }}复制代码

然后我们执行B::test(),这个时候会输出什么呢?

A复制代码

对,还是A,因为self关键词只能取到定义当前方法所在的类,或者说它只能取到自己所在的那个类。

好吧,B肯定有点小失望~test()是在你A里面定义的,但是B::test(),这个时候可是我B实际调用的test()方法啊,实际运行的不应该是我B吗?

“借了你的鸡,下了个蛋,就跟我没关系了?谁养的来? ”“这还真不好说。。。”“那娶了个媳妇,生了个孩子,孩子还属于娘家吗?”“有道理!”复制代码

于是,A做出了一定的妥协:

class A {    public static function who() {        echo __CLASS__;    }    public static function test() {        static::who(); // 后期静态绑定    }}复制代码

现在我们执行B::test(),这个时候会输出什么呢?

B复制代码

也就是说,我们可以用一个static关键词,来获取到运行当中、实际调用这个静态方法的类。如果只是需要获取静态方法调用的类名,那么你也可以使用get_called_class().

好了,这玩意儿有什么用呢?

save(); return $model; }}class Task extends Model{ }Task::create([ 'title'=>'学习laravel', 'author'=>'pilishen']);复制代码

当执行Task::create()的时候,因为extendsModel,所以就到了Model里的create方法,由于$model = new static($attributes);使用了static关键词,所以此时也就相当于是执行了new Task();,也就是借助static静态绑定,我们在laravel里的自己创建的各个model,就可以共用一系列提前定义好的方法,同时在实际调用的时候,又将结果或过程只作用于自己,从而实现了一个典型的。

当然,类似的在laravel里多了去了,更详细的我们会在里阐述。

转载地址:http://ljqwm.baihongyu.com/

你可能感兴趣的文章
tomcat 配置 字符串UTF-8 支持中文请求路径
查看>>
jstl jsp 计算相加
查看>>
spring junit使用疑问
查看>>
Protostar format2
查看>>
WEB 组件开发相关记录
查看>>
【Eclipse】 类似syso快捷键补全代码的自定义
查看>>
JS 实现一次下载多个文件
查看>>
删除osd步骤
查看>>
我的友情链接
查看>>
为EditText设置OnTouchListener事件监听
查看>>
ORA-15064 tips
查看>>
marathon-lb使用实践
查看>>
九、RabbitMQ的集群安装
查看>>
Linux( rhel-server-7.0-x86_64)安装Oracle Database 12c Release 1
查看>>
解决:Word遇到问题需要关闭
查看>>
哈夫曼树构造算法的正确性证明
查看>>
时间:2014年4月12日16:21:56商城首页开发
查看>>
求二进制中1的个数
查看>>
顺时针打印矩阵
查看>>
Linux 权限整理
查看>>