深入浅出PHP中的Static——静态

0x01 引子

好吧,我不得不承认在写这篇文章之前我对于PHP的静态static的用法只是一知半解,在深入学习了静态的用法后,真的很惭愧,发现以前真的不懂,希望这篇文章能够对看到的读者有所启示(希望你不是跟我一样也是一点也不知道TAT..)

0x02 静态之初试

不知道大家是否跟我一样,对于面向对象语言的静态变量其实是听过的,模模糊糊地知道,如果在类中声明了静态变量,那么在函数中操作这个变量,实际上相当于操作这个变量本身,也就是引用,是一个概念的,他不会在函数执行完成后被销毁掉。在这之前,对于静态变量我大概就知道这些吧,那么今天博主带大家再深入理解这个概念吧。

0x03 静态之深入

首先要介绍的是,PHP中的静态变量和静态方法是可以在对象没有实例化之前就能使用的,就像这样:

看到没有!!是不是很神奇!!(【捂脸:)】好吧,少见多怪了,大佬勿喷。。)我类A的外面我没有new这个类,只是用了类名加一对冒号接上静态变量和静态方法即可使用

1
2
类名::静态变量
类名::静态方法

所以说在以前代码审计的时候看到一些用框架写的面向对象的cms,就觉得好像从来没有实例化对象一般,原来是这么回事。。

0x04 静态变量

至于使用规则嘛,对于静态变量也没什么好说的了,就是要记住可以在对象没有实例化的时候就可以访问了,可以通过self::静态变量的方式访问本类中的静态变量,当然了,必须在本类的静态方法中使用才行哦~

0x05 静态方法

对于静态方法,规则就比较多了。

  1. 静态变量只能通过静态方法来调用
    就像之前说过的那样,在静态方法中使用self::静态变量的方式可以调用本类中的静态变量,就像这样:

  2. 静态方法不能调用非静态变量

  3. 静态方法可以调用静态方法

  4. 静态方法可以调用非静态方法,但是非静态方法会自动转换为静态方法

我们可以看到,尽管出现了警告,但是hello world!还是echo出来了。

本文标题:深入浅出PHP中的Static——静态

文章作者:Pino-HD

发布时间:2018年06月10日 - 16:06

最后更新:2018年06月10日 - 16:06

原始链接:https://pino-hd.github.io/2018/06/10/深入浅出PHP中的Static——静态/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!