微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP – 何时在类中使用私有静态属性

我正在学习PHP,而且语言中还有很多不清楚的地方.我想知道我们何时以及为什么要在类中使用私有静态属性.根据我的理解,私有属性只能由定义它的类访问.因此,私有部分很清楚,但静态仍然不清楚.在文档中它说:

Declaring class properties or methods as static makes them accessible
without needing an instantiation of the class. A property declared as
static cannot be accessed with an instantiated class object (though a
static method can).

这是否意味着我可以访问静态属性而无需实例化类.所以,例如:

class Foo{

    static $bar;

    public function __construct($bar){
        $this->bar = $bar;
    }

那么,我可以这样访问该类的$bar属性吗?

Foo::$bar

但是,如果我这样做,它将不起作用?

$foo = new Foo();
$foo::$bar

然后,如果确实将属性设为私有静态,我们会这样做,因为我认为我们将它们设置为静态以便在类之外访问它们并将它们设为私有将使这变得不可能.如果有人能清楚这一点,我将非常感激.

解决方法:

声明普通属性时,对于您创建该类的每个实例(使用新Foo创建的每个对象),该属性都有不同的值.对于静态属性,整个类有一个该变量的副本.

这与该变量的可见性是分开的 – 每个类都存在一次公共静态属性,并且可以从任何地方访问;每个类都存在一次私有静态属性,但只能从该类的定义中访问.

举个简单的例子,你可以有一个计数器,它给每个类的实例一个唯一的数字.您不需要在类外部查看或更改此计数器的代码,因此您将其标记为私有,但需要在所有实例之间共享,因此您将其标记为静态.

class Foo {
    // Static counter; shared with every instance
    private static $nextID=0;

    // normal instance property: each instance will have its own value
    private $myID;

    public function __construct() {
        // Set the ID for this instance to the next ID
        $this->myID = self::$nextID;
        // Increment the shared counter
        self::$nextID++;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐