首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP中self::$bar和static::$bar有什么区别?

PHP中self::$bar和static::$bar有什么区别?
EN

Stack Overflow用户
提问于 2012-07-29 22:41:45
回答 2查看 73.8K关注 0票数 154

在下面的示例中使用selfstatic有什么区别?

class Foo
{
    protected static $bar = 1234;

    public static function instance()
    {
        echo self::$bar;
        echo "\n";
        echo static::$bar;
    }

}

Foo::instance();

产生

1234
1234
EN

回答 2

Stack Overflow用户

发布于 2020-09-26 08:49:04

我有一个小例子来说明selfstatic之间的区别。使用static::执行后期静态绑定,从而绑定来自子类的变量值。

class A { // Base Class
    protected static $name = 'ClassA';
    public static function getSelfName() {
        return self::$name;
    }
    public static function getStaticName() {
        return static::$name;
    }
}

class B extends A {
    protected static $name = 'ClassB';
}

echo B::getSelfName(); // ClassA
echo B::getStaticName(); // ClassB
票数 18
EN

Stack Overflow用户

发布于 2019-11-20 04:41:39

正如前面提到的,其中一个主要区别是static允许延迟静态绑定。我发现的最有用的场景之一是为Singleton类创建基类:

class A { // Base Class
    protected static $name = '';
    protected static function getName() {
        return static::$name;
    }
}
class B extends A {
    protected static $name = 'MyCustomNameB';
}
class C extends A {
    protected static $name = 'MyCustomNameC';
}

echo B::getName(); // MyCustomNameB
echo C::getName(); // MyCustomNameC

在基类中使用return static::$name将返回扩展时静态附加的内容。如果您使用return self::$name,那么B::getName()将返回一个空字符串,因为这是在基类中声明的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11710099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档