php静态类,PHP实战技巧(11)PHP中的静态知识:静态类属性、方法

本文介绍了PHP中静态变量和类属性的概念及使用方法,包括通过`::`调用静态资源、定义及调用静态方法和属性。强调了静态属性在任何地方都可以进行赋值和读取,特别适用于MVC框架中的数据传递,但可能影响性能并导致特定情况处理复杂。同时,提到全局变量存储于静态内存区,但并非静态变量,并预告将讲解单例模式。
摘要由CSDN通过智能技术生成

前言

静态变量用的不多,但是静态的类属性、类方法,则是工作中必不可少的一个知识点。

基础语法

先看代码,下面逐一进行解释。

cf5eb7ba70b1ea3cb87190cc367c049c.png

“::” 是什么?

它是两组冒号,调用静态资源专属语法,基本功能接近 ->。

定义静态方法、属性

在属性、方法前加 static 关键字,就可以将其定义为静态。

调用静态属性

必须通过 类::$属性名 的形式,不能使用 $this->属性名。

调用静态方法

可以通过 类::方法名() 的形式,也可以通过 $this->方法名() 的形式。

关于 $this 伪变量

因为静态调用没有 new 类() 的过程,所以 $this 不存在,调用就报错(参考代码16行)需改为 self::$属性(参考11行)

实战意义

不用 new,用起来省事,这是表面上最容易看到的优点。

除此之外,看一个例子

下面的代码,执行结果是什么?

42193b64afc107abc95f63889452491e.png

会报错!因为 $x 是局部变量,离开函数后就销毁了。

看另一个例子

执行后会怎样?(SoDevel 这个类来自第一段代码)

fde7682e85d94cd6b3062101145f0642.png

不会报错,可以正常使用。

为什么会这样?

普通局部变量,一旦函数执行完毕就销毁,但是静态变量不会。

静态类属性就更牛了,不光不会销毁,还可以被其他局部环境所调用。(静态变量虽然没有销毁,但是只能在定义它的函数内使用)

这样有什么意义?

意义大了。

在面向对象编程中,我们主要代码都在局部环境(也就是类方法里),而在方法中定义的变量,都是局部变量。就算使用 $this->var 定义成类属性,也只能在类的内部使用。

而 静态类属性 可以无视所有规则,在任何地方都能随时进行赋值、读取操作。

你用过MVC结构的框架吗?

在控制器里定义变量,都需要用 $this->assign() 或者类似的语法,传递给模板。

如果使用静态类属性,就可以免去这个过程,模板拿来即用。

那为什么框架不这样做?

因为某些特定情况不好处理,并且会导致性能下降(静态资源直到程序执行完毕才释放)

总结

昨天少说了一句话,在PHP中 所有全局变量都存储于静态内存区(但他们并不是静态变量)。

所以,你知道全局变量在什么时候销毁吗?

预报:明天给大家讲 单例模式,它是基于静态特性实现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值