PHP 里的 self、static、parent 关键字

老牛浏览 437评论 0发表于

1. 不存在继承的时候

self 和 static 在范围解析操作符 :: 的使用上,并无区别。

静态函数中,self 和 static 可以调用静态属性和静态函数(没有实例化类,因此不能调用非静态的属性和函数)。

非静态函数中,self 和 static 可以调用静态函数和静态方法以及非静态函数

此时,self 和 static 的表现是一样的,可以替换为该类名 :: 的方式调用。

2. 存在继承的时候

继承时,self 和 static 在范围解析操作符 :: 的使用上有差别。parent 也是在继承的时候使用。

  • self 调用的静态方法或属性始终表示定义当前方法或属性所在的类的方法或属性,可以替换为其类名,但是在类名很长或者有可能变化的情况下,使用 self:: 的方式无疑是更好的选择。

  • static 调用的静态方法或属性表示实际调用所在的类的方法或属性。

  • parent 用于调用父类的方法或属性。

2.1 代码实例

php
class A
{
    public static function who()
    {
        echo __CLASS__;
    }

    public static function foo()
    {
        static::who();
    }
}

class B extends A
{
    public static function test()
    {
        A::foo();
        parent::foo();
        self::foo();
    }

    public static function who()
    {
        echo __CLASS__;
    }
}

class C extends B
{
    public static function who()
    {
        echo __CLASS__;
    }
}

C::test();

//output:ACC
点赞
收藏
暂无评论,快来发表评论吧~
私信
老牛@ilaoniu
老牛,俗称哞哞。单纯的九零后理工小青年。喜欢折腾,爱玩,爱音乐,爱游戏,爱电影,爱旅游...
最后活跃于