静态方法和实例化方法是PHP编程中经常出现的两种方法,一个是通过类直接调用,一个是先实例化一个类得到一个对象,然后再通过对象来调用。如下图所示:
「PHP编程」静态方法和实例化方法的使用场景,你真的了解吗?
虽然,我们一直这样使用,但我们真的知道,什么时候该使用静态方法,什么时候该使用实例化方法吗?
思考误区
通过平时与其他开发人员交流发现,在静态方法和实例化方法的使用上,存在几个思考误区:
1、静态方法常驻内存,实例方法不是,所以静态方法比实例方法效率高,但占内存。
事实上,静态方法和实例化方法在加载时机和占用内存上是一样的,在类第一次被使用时调用的速度基本上没有差别。
方法占不占用更多内存,和它是不是静态没什么关系。
2、静态方法在堆上分配内存,实例方法在堆栈上分配内存。
其实,所有的方法都不可能在堆或者堆栈上分配内存。实际上,方法作为代码是被加载到内存中特殊的代码区的,这个内存区域是不可写的。
类实例化后,其所有的信息,都保存在另外的区域里。
3、实例方法需要先创建实例才可以调用,比较麻烦;静态方法不用,比较简单。
实际上如果一个方法与他所在类的实例对象无关,那么它就应该是静态的,而不应该把它写成实例方法。所以所有的实例方法都与实例有关,既然与实例有关,那么创建实例就是必然的步骤,没有麻烦简单一说。
使用原则
1、从面向对象的角度上来说,在选择是使用实例化方法还是静态方法时,应该根据的是该方法和实例化对象是否具有逻辑上的相关性,如果有就应该使用实例化对象,反之,则使用静态方法。
2、如果从线程安全、性能、兼容性上来看,则选用实例化方法为宜。
总结
早期的结构化编程,几乎所有的方法都是“静态方法”,引入实例化方法概念是面向对象概念出现以后的事情了,区分静态方法和实例化方法不能单单从性能上去理解,创建c++,java,c#这样面向对象语言的大师引入实例化方法一定不是要解决什么性能、内存的问题,而是为了让开发更加模式化、面向对象化。这样说的话,静态方法和实例化方式的区分是为了解决模式的问题。
拿别人一个例子说事:
比如说“人”这个类,每个人都有姓名、年龄、性别、身高等,这些属性就应该是非静态的,因为每个人都的这些属性都不相同;但人在生物学上属于哪个门哪个纲哪个目等,这个属性是属于整个人类,所以就应该是静态的——它不依赖与某个特定的人,不会有某个人是“脊椎动物门哺乳动物纲灵长目”而某个人却是“偶蹄目”的。
合肥达内PHP培训“互联网大牛”软件工程师课程为有志成为互联网软件“行业新贵”的学员精心打造,从第一天起就力求知识的“新”和“深”。不但及时更新互联网知识(如:Yii框架、HTML5、NoSQL、Bootstrap、LessCSS、Minify等),同时对基础知识要达到足够的深度(如:PHP核心函数库行业内全,MySQL行业内内容深入)。
每年有10W人选择达内,选择的人多,自然是好培训!我们的课程专为零基础打造,是学PHP必经之路!如果你想在2018年成为一名高薪PHP工程师,那就从参加合肥达内免费训练营开始吧!在线留言客服可免费试听,试听过后,学不学,你说了算。
*版权声明:转载文章和图片均来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。