浅谈静态方法、非静态方法,单例

本文围绕PHP的静态方法、非静态方法和单例展开。介绍了两者调用方式,指出操作类属性时用非静态方法,否则用静态方法可减少开销。还阐述了单例概念,给出三者使用优先级。同时解答了服务器操作静态方法是否数据紊乱、单例与同时请求的关系等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浅谈静态方法、非静态方法,单例

首先,方法是用来调用的,那我们就从调用来说起,这块比较简单,举个例子,静态方法:className::func() 或 self::func()(类内部调用);非静态方法:objName = new className(); objName->func();或$this->func()(对象内部调用)。
说上面的例子其实主要是想引出一个问题,那就是,调用非静态方法的时候,多了一步实例化对象的过程。那么问题来了,用的时候该怎么抉择呢,这个时候就要引出另一个概念——类属性,简单说就是,如果我们在方法内要操作改变属性的值,那就用非静态方法去操作非静态属性。否则最好用静态方法,这样能少些系统开销,省去了实例化对象的过程,也不用分配内存去存放对象,结束的时候更不用销毁对象。
相信大家都知道单例这个概念,这三个概念的关系是这样的,类是基础,单例是不管你对类实例化几次,都是只产生一个对象,非单例是实例化几次就会产生几个对象。所以在条件允许的情况下,这三者的优先级应该是 静态>单例非静态>非单例非静态。和静态方法相比,单例是劣势在于,还是会多一步实例化的过程。好处就是方便做对象销毁。实际上我们一个http请求是可以包含多个请求数据包的,这个时候,如果需要数据隔离,那我们处理完前一个请求的时候,直接销毁对象就可以了。
在此,解释几个曾经困扰我的问题:
1、假如服务器同时操作静态方法,有没有可能有数据紊乱的时候。答案是没有可能。原因在于PHP是单线程的,同时处理多个请求,是多进程在处理,相互之间不会有影响。
2、单例,只是在同一次请求中多次实例化的时候不会产生多个对象。跟同时请求没关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值