增加构造函数中的静态类变量

时间:2016-02-07 23:10:05

标签: php

您好我有以下简单问题:

每次创建对象的实例时,我都想增加一个静态类变量。我试过这个:

class task
{
    static $tid = 0;

    function __construct()
    {
        $this->tid++;
    }   
}

这将返回以下错误消息:

Notice: Undefined property: task::$tid in ... on line ...

如何正确执行此操作? Thx提前:))

修改

很抱歉,很明显这种方法无法正常工作,因为static关键字表明该属性未绑定到实例,因此 - >不起作用。但是如何正确地做到这一点?

$tid++无效。错误:未定义的变量。

2 个答案:

答案 0 :(得分:3)

根据PHP manual

  

使用箭头操作符 - >无法通过对象访问静态属性。与任何其他PHP静态变量一样,静态属性只能在PHP 5.6之前使用文字或常量进行初始化;表达式是不允许的。

然而有一种方法。您必须使用self关键字:

class Task
{
    static $tid = 0;

    function __construct()
    {
        self::$tid++;
    }   
}

new Task();
new Task();

echo Task::$tid;

将输出2

答案 1 :(得分:3)

以下每次创建新类实例时都会增加静态。您必须使用self关键字。然后,您可以使用$var::$tid访问该值,或创建一个函数来返回该值。以下将返回1122.当然,正如Nordenheim指出的那样,如果$ tid为public static,则不需要getter fn。如果是private static,则getter将允许访问它。

class task
{
    public static $tid = 0;

    public function __construct()
    {
        self::$tid++;
    }   

    public function gettid(){
    return self::$tid;
    }

}

$a = new task;
echo ($a->gettid());
echo $a::$tid;

$b = new task;
echo ($b->gettid());
echo $b::$tid;