class StaticTester
{
private static $id=0;
function__construct()
{
self::$id+=1;
}
public static function checkIdFromStaticMethod()
{
echo "Current Id from Static method is ".self::$id;
}
}
$st1=new StaticTester();
StaticTester::checkIdFromStaticMethod(); // this outputs 1.
好的,我不明白为什么输出是1? 毕竟静态意味着值无法更改!
不,静态意味着没有实例,您可能正在寻找常量。
function__construct()
{
self::id+=1;
}
应该是
function__construct()
{
self::$id+=1;
}
错过了一个美元符号:)
哎呀。。。。误读了问题。我以为你的代码有错误呵呵。你做到了,但可能只是一个复制/粘贴错误。
它变成 1,因为每次创建新对象时它都会递增 1。 并且所有对象共享相同的 id 变量。 这就是静态的含义。
一个永远不能改变的数字称为constant
,并在PHP中用关键字const
声明。
static
并不意味着该值根本无法更改! 你想要const
,或者final
(PHP 没有(。 static
实际上将保留方法调用之间的值(因为它是成员,所以无论如何都会(。
静态并不意味着
不能更改该值,而是表示该值保存在类级别而不是实例级别。其他语言(如Java(有时将其称为"类变量"。
我认为您在static
和final
或const
之间感到困惑.
手动参考:
-
static
关键字 -
final
关键字 - 类常量
静态表示:对于所有可能的实例,将使用相同的变量
function__construct()
{
self::$id+=1;
}
$st1=new StaticTester();
当做新的时,__construct被调用,所以你的$id静态变量将被使用和增加。你可以做$st 2=new StaticTester(( , StaticTester::checkIdFromStaticMethod(( 将返回 2 !!这就是你的代码在编写时要做的事情。
同意"恒定"的答案。