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

本文深入探讨PHP中static关键字的使用,详细解释静态属性与静态方法的特点,包括它们的访问方式、调用限制及与非静态成员的区别。同时,通过实例展示了静态方法如何调用非静态方法。

# 概述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值