PHP 静态类和普通的类到底怎么区分?

2017-07-05 17:17:21 +08:00
 hoythan

我所理解的,不论是静态还是常规的类, 都可以使用 ::

常规类使用:: 里面不能用$this

但是还是不明白啥时候用静态?

意思是如果我这个类里面没有用到$this 都应该使用静态吗?

3117 次点击
所在节点    PHP
18 条回复
littleylv
2017-07-05 17:32:04 +08:00
虽然楼主隐藏了他创建的主题: https://www.v2ex.com/member/hoythan

但整个 PHP 节点里都是些什么啊: https://www.v2ex.com/go/php

最基本的,楼主可以去看看官方手册么?
tabris17
2017-07-05 17:36:52 +08:00
什么叫静态类?楼主你明白自己在说什么吗?
aprikyblue
2017-07-05 17:37:42 +08:00
https://segmentfault.com/

这里可能更适合?
fyibmsd
2017-07-05 17:38:24 +08:00
RTFM
hoythan
2017-07-05 18:45:32 +08:00
@tabris17 打错了,类=>方法。
hoythan
2017-07-05 18:46:34 +08:00
@fyibmsd 我看过手册,有自己的理解,这里的问题是问我理解的对了没
hoythan
2017-07-05 18:48:14 +08:00
@littleylv php 节点本来就冷清,我吧问题整理出来一起问下都妨碍你了?伤你眼了还是伤你脑了?还是浪费你时间打字了?
hasdream
2017-07-05 18:50:18 +08:00
一个不用实例化就能调用,一个需要实例化才能调用
hoythan
2017-07-05 18:56:30 +08:00
@hasdream 我试了下确实不能再静态方法中使用 $this->
johnlui
2017-07-05 19:30:14 +08:00
建议楼主去 segmentfault 问基础知识
joeke
2017-07-05 19:35:09 +08:00
这个就不用在这里问了吧,查一下手册就出来了
littleylv
2017-07-05 19:50:00 +08:00
@joeke #11
@johnlui #10
他还怼我了 😒
bombless
2017-07-05 19:50:38 +08:00
有些人觉得不应该有静态方法
我的习惯是不用$this 的情况下都用静态静态方法
we3613040
2017-07-05 21:37:59 +08:00
静态方法是为了引入 function 的,而静态不能用 this,是因为他们在不同的内存里,内存模型那块,所以不能调用
Keson
2017-07-06 08:44:16 +08:00
1、不论是静态还是常规的类, 都可以使用 ::
这个是 php 我觉得误人子弟的地方,事实上静态方法用::,非静态方法用$this->。只是早期 php 不知道为什么可以混用。一些 IDE ( phpstorm )如果用错了的话会有黄色提示警告的。但是还是可以运行的。

2、常规类使用:: 里面不能用$this
应该是问“静态类使用:: 里面不能用$this ”?因为静态方法其实是只有一个副本。不会想非静态类一样可以 new 多个实例,所以在静态方法里面只能调用本类的其他静态资源(静态方法或静态变量等)。

3、但是还是不明白啥时候用静态?意思是如果我这个类里面没有用到$this 都应该使用静态吗?
跟第二个问题一样,建议楼主可以看看静态类、静态方法、静态变量等知识就懂了。
TIGERB
2017-07-06 16:36:48 +08:00
静态只能维护全局的状态,普通类的对象可以分别维护自己的状态
changwei
2017-07-06 19:08:12 +08:00
看了一下整个 PHP 节点一片火红的景象啊,全是楼主头像。。。
lazydao
2017-07-20 22:27:11 +08:00
@hoythan 腊鸡 别出来丢人现眼

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/373271

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX