深入理解PHP中的static和yield关键字

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了深入理解PHP中的static和yield关键字脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

本文主要给大家介绍了关于PHPstatic和yield关键字的相关内容分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

先来说说 static 关键字。本篇只讲静态方法的使用与后期绑定的知识点。

static 什么时候用来修饰方法

static 关键字大家都知道是用来修饰方法属性的。 那么大家在项目中会在哪些场景下使用它?

我遇到过几个项目,要求所有的方法全部 static 化,当然控制器方法不能这么干。原因之一就是:静态方法执行效率高?那么我们基于此来分析一下。

首先执行效率高我是没有意见的。哪么是不是因为它效率高,就该毫无节制的使用在项目中?讨论这个问题先来回顾下编程语言的历史。在早一点的时候,还没有面向对象,采用的都是结构化编程,当时基本上所有的方法都是 静态方法,然后有了面向对象,产生了实例化的概念。

从上面简短的发展过程可以看出,如果仅仅为了性能,哪么面向对象好像没有存在的必要。那么这些大师为了要在 c++ java 这些语言中引入面向对象、引入实例化的感念呢?我觉得是因为伴随发展,项目越来越大,需要更好的组织代码方式与编程思维

再回过头来看 static ,它定义的静态方法,效率确实高,但是会持续占用内存,只有在程序@L_406_16@时才结束生命周期,期间无法进行销毁等副作用是其一;其二从设计模式上来说,它具有强耦合性,外部可修改 static 属性;其三static定义的方法没有办法override来重写,ioc di等概念无用武之地;其四在进行单元测试时,静态方法让人头痛。

那么通过上面所说,感觉以后还是别用 static 方法了,老老实实的实例化然后调用方法?咱们得理性,不能极端到什么地方都用,也不能一丁点都不用。一句话:学会面向对象的方式来思考。我们写代码的第一考虑点我觉得是:可扩展性(应对业务快速变化),可维护性(线上问题及时修复)。高效率应该是最后再来考虑(因为优化效率的手段非常之多,并不一定非要给每个方法加个: static)。如果从面向对象的角度出发,这个方法完全独立跟类属性无关,那么就用 static 吧。

总之是站在面向对象的角度,软件设计的层次来考虑语法的使用,而不是为了效率破坏掉代码的美。

static 后期静态绑定

这一点PHP的文档做了详细的介绍,但是我以前一直很少关注这个地方,基本上都是使用 self:: 的方式进行静态方法属性调用

我觉得后期绑定某种程度上,像是静态方法的重载。这里贴出 PHP 文档中的例子来进行一下讲述

<PRe class="brush:PHp;"> <>PHP class A { public static function who() { echo __CLASS__; } public static function test() { self::who(); static::who();// 后期静态绑定 } }

class B extends A {
public static function who() {
echo CLASS;
}
}

B::test();

脚本宝典总结

以上是脚本宝典为你收集整理的深入理解PHP中的static和yield关键字全部内容,希望文章能够帮你解决深入理解PHP中的static和yield关键字所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:php