博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
静态方法里不能使用$this标识调用静态方法
阅读量:6962 次
发布时间:2019-06-27

本文共 995 字,大约阅读时间需要 3 分钟。

hot3.png

# 概述

static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为"类属性"或"类方法"

# 静态属性

静态属性不可以由对象通过 -> 操作符来访问。

 

 

# 静态方法里不能使用$this标识调用静态方法

静态方法是属于类的,被每个类的实例所共享。由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。

静态方法随着类的加载而加载,静态方法是优先于对象而存在的。当我们加载一个类的时候,对象还没有存在,而this代表的是对象的引用,试问当我们加载类的时候对象都没有,又怎么可以使用this呢?答案显而易见

this是指当前对象(相当于一个句柄),静态方法是通过类调用的方法,不需要实例化,既然不需要实例化,就没有当前对象,既然没有当前对象,就不会有this

# 普通方法调用静态方法

```

$this

self

parent

```

# 静态方法调动成员

静态方法不能调用非静态属性 。不能使用self::调用非静态属性。

但是可以调用不含$this标识的非静态方法。

````

// 实现最大值比较的Math类。     

class Math   
{         
    public function Max($num1, $num2) {            
        return $num1 > $num2 ? $num1 : $num2;     
    }     
    public static function Max3($num1, $num2, $num3) {     
        $num1 = self::Max($num1, $num2);     
        $num2 = self::Max($num2, $num3);     
        $num1 = self::Max($num1, $num2);             
        return $num1;     
    }     
}  

```

> 当一个类中有非静态方法被self:: 调用时,系统会自动将这个方法转换为静态方法。

# 总结:

在PHP中 所有全局变量都存储于静态内存区(但他们并不是静态变量)。

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

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

转载于:https://my.oschina.net/u/3683692/blog/3038724

你可能感兴趣的文章
vue 刷新或者加载闪烁
查看>>
代码签名证书过期,Mozilla数百万Firefox用户遭遇扩展禁用
查看>>
spring batch +boot
查看>>
iOS 11 vs 10: UI和交互全面对比分析
查看>>
如何搭建maven及学习Python
查看>>
JMeter学习之元件的作用域与执行顺序
查看>>
7-设计模式-工厂模式
查看>>
NFS 安装,设置,选项
查看>>
zip,tar,打包并压缩
查看>>
数据库两大神器【索引和锁】
查看>>
spring security 原理归纳整理
查看>>
简单明了!嵌入式Linux启动过程详解
查看>>
组件 & Props
查看>>
java 利用java运行时的方法得到当前屏幕截图的方法
查看>>
Spring aop学习
查看>>
2.01-JDK的安装配置
查看>>
Scala学习(六)对象
查看>>
005,elasticsearch多种搜索方式--语法初窥
查看>>
dubbo中的group与version
查看>>
基础拾遗-----数据注解与验证
查看>>