你以为你无所不知,其实你只是想。知识之美在于它认为一生如此短暂。好了扯远了,今天只想说说:static和yield。先说static关键字。本文只讲静态方法的使用和后期绑定的知识点。什么时候用static修饰方法众所周知,static关键字是用来修饰方法和属性的。那么在项目中会在哪些场景下使用呢?我遇到过几个要求所有方法都是静态的项目。当然,控制器方法不能做到这一点。原因之一是:静态方法执行效率高?那么我们就根据这个来分析一下。首先,执行效率高我是没问题的。那么是否应该因为效率高而不受约束地用在项目中呢?为了讨论这个问题,让我们回顾一下编程语言的历史。早期没有面向对象,采用结构化编程。那时候基本上所有的方法都是静态方法,后来有了面向对象,就产生了实例化的概念。从上面简要的开发过程可以看出,如果只是为了性能,面向对象似乎没有必要。那么这些高手想把面向对象和实例化的概念引入到c++java等语言中是为了什么呢?我想是因为随着开发,项目越来越大,需要更好的代码组织方式和编程思维。反观static,它定义的static方法确实高效,但是会持续占用内存,只有程序退出时生命周期才会结束。副作用之一是期间无法销毁;另一个是来自设计模式,耦合性强,静态属性可以被外部修改;第三,static定义的方法不能重写,iocdi等概念没用;第四,静态方法在执行单元测试时令人头疼。所以通过上面,我觉得以后是不是应该不用静态方法了,老老实实实例化调用方法吧?我们要理性,不能处处走极端,根本不能走极端。一句话:学会以面向对象的方式思考。我觉得我们写代码首先考虑的是:可扩展性(应对业务快速变化)、可维护性(及时修复线上问题)。高效率应该是最后考虑的(??因为优化效率的方法太多了,没必要每个方法都加一个:static)。如果从面向对象的角度来看,这个方法是完全独立的,与类属性无关,那就用static。总之,从面向对象的角度,在软件设计层面考虑语法的使用,而不是为了效率而破坏代码的美感。static后期静态绑定的php文档已经做了详细的介绍,但是之前很少关注这个地方,基本都是使用self::来调用静态方法和属性。我认为后期绑定有点像静态方法的重载。下面是php文档中的一个例子来解释它
