您好我有以下简单问题:
每次创建对象的实例时,我都想增加一个静态类变量。我试过这个:
class task
{
static $tid = 0;
function __construct()
{
$this->tid++;
}
}
这将返回以下错误消息:
Notice: Undefined property: task::$tid in ... on line ...
如何正确执行此操作? Thx提前:))
修改
很抱歉,很明显这种方法无法正常工作,因为static关键字表明该属性未绑定到实例,因此 - >不起作用。但是如何正确地做到这一点?
$tid++
无效。错误:未定义的变量。
答案 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;