V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hoythan
V2EX  ›  PHP

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

  •  
  •   hoythan · 2017-07-05 17:17:21 +08:00 · 3239 次点击
    这是一个创建于 2696 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    18 条回复    2017-07-20 22:27:11 +08:00
    littleylv
        1
    littleylv  
       2017-07-05 17:32:04 +08:00   ❤️ 2
    虽然楼主隐藏了他创建的主题: https://www.v2ex.com/member/hoythan

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

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

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

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

    3、但是还是不明白啥时候用静态?意思是如果我这个类里面没有用到$this 都应该使用静态吗?
    跟第二个问题一样,建议楼主可以看看静态类、静态方法、静态变量等知识就懂了。
    TIGERB
        16
    TIGERB  
       2017-07-06 16:36:48 +08:00
    静态只能维护全局的状态,普通类的对象可以分别维护自己的状态
    changwei
        17
    changwei  
       2017-07-06 19:08:12 +08:00
    看了一下整个 PHP 节点一片火红的景象啊,全是楼主头像。。。
    lazydao
        18
    lazydao  
       2017-07-20 22:27:11 +08:00 via iPhone
    @hoythan 腊鸡 别出来丢人现眼
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5790 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 01:54 · PVG 09:54 · LAX 17:54 · JFK 20:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.