php静态方法调用非静态方法,php静态方法和非静态方法的区别

首页 > 科技 > 作者:YD1662024-04-12 03:24:26

静态方法和实例化方法是PHP编程中经常出现的两种方法,一个是通过类直接调用,一个是先实例化一个类得到一个对象,然后再通过对象来调用。如下图所示:

php静态方法调用非静态方法,php静态方法和非静态方法的区别(1)

虽然,我们一直这样使用,但我们真的知道,什么时候该使用静态方法,什么时候该使用实例化方法吗?

思考误区

通过平时与其他开发人员交流发现,在静态方法和实例化方法的使用上,存在几个思考误区:

1、静态方法常驻内存,实例方法不是,所以静态方法比实例方法效率高,但占内存。

事实上,静态方法和实例化方法在加载时机和占用内存上是一样的,在类第一次被使用时调用的速度基本上没有差别。

方法占不占用更多内存,和它是不是静态没什么关系。

2、静态方法在堆上分配内存,实例方法在堆栈上分配内存。

其实,所有的方法都不可能在堆或者堆栈上分配内存。实际上,方法作为代码是被加载到内存中特殊的代码区的,这个内存区域是不可写的。

类实例化后,其所有的信息,都保存在另外的区域里。

3、实例方法需要先创建实例才可以调用,比较麻烦;静态方法不用,比较简单。

实际上如果一个方法与他所在类的实例对象无关,那么它就应该是静态的,而不应该把它写成实例方法。所以所有的实例方法都与实例有关,既然与实例有关,那么创建实例就是必然的步骤,没有麻烦简单一说。

使用原则

1、从面向对象的角度上来说,在选择是使用实例化方法还是静态方法时,应该根据的是该方法和实例化对象是否具有逻辑上的相关性,如果有就应该使用实例化对象,反之,则使用静态方法。

2、如果从线程安全、性能、兼容性上来看,则选用实例化方法为宜。

总结

早期的结构化编程,几乎所有的方法都是“静态方法”,引入实例化方法概念是面向对象概念出现以后的事情了,区分静态方法和实例化方法不能单单从性能上去理解,创建c ,java,c#这样面向对象语言的大师引入实例化方法一定不是要解决什么性能、内存的 问题,而是为了让开发更加模式化、面向对象化。这样说的话,静态方法和实例化方式的区分是为了解决模式的问题。

拿别人一个例子说事:

比 如说“人”这个类,每个人都有姓名、年龄、性别、身高等,这些属性就应该是非静态的,因为每个人都的这些属性都不相同;但人在生物学上属于哪个门哪个纲哪 个目等,这个属性是属于整个人类,所以就应该是静态的——它不依赖与某个特定的人,不会有某个人是“脊椎动物门哺乳动物纲灵长目”而某个人却是“偶蹄目” 的。

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.