我想知道 PHP 在类中是否有一种变量,其功能类似于其他语言中的静态变量。我的意思是同一类的所有对象都使用相同的变量,并且当它更新一个时,它会更新每个对象。静态很接近,因为它在所有对象中共享,但我需要能够更新它。我必须为此使用全局变量吗?
问问题
9483 次
6 回答
6
正确的答案是 PHP 中没有与 final 等价的东西,但无论如何,静态似乎都是你想要的。
static具有在类的所有实例中具有相同值的属性,因为它不绑定到特定实例。
您将需要使用::运算符来访问它,因为是静态的,您不能使用->。
于 2009-07-29T06:49:10.543 回答
4
我认为静态是你想要的。您可以更新静态变量,只需在“静态上下文”中进行(即使用 :: 运算符。
class Class1 {
protected static $_count = 0;
public function incrementCount() {
return self::$_count++;
}
}
$instance1 = new Class1();
$instance2 = new Class1();
var_dump($instance1->incrementCount(), $instance2->incrementCount());
将输出:
整数 0
诠释 1
于 2009-07-29T06:00:05.603 回答
1
您可以更新静态属性:
class A {
protected static $_foo = 0;
public function increment()
{
self::$_foo++;
}
public function getFoo()
{
return self::$_foo;
}
}
$instanceOne = new A();
$instanceTwo = new A();
$instanceOne->getFoo(); // returns 0
$instanceTwo->increment();
$instanceOne->getFoo(); // returns 1
于 2009-07-29T05:59:06.040 回答
0
您可以简单地在名为 Constants 的 PHP 文件中创建变量。
--Constants.php-- $DATABASE_NAME = "mysql"
并将该文件包含在您的文件中。您可以更改其值。它接近你想要的,但称它们为常量并不好,因为常量并不意味着改变,这让我感到困惑:)。
于 2009-07-29T05:51:55.430 回答
0
我不明白为什么使变量 static 不适用于您所描述的内容(但这与关键字 final 无关)?
<?php
class Bla
{
public static $var;
public function __construct()
{
Bla::$var = Bla::$var + 1;
}
}
$test = new Bla();
echo Bla::$var; // 1
$test = new Bla();
echo Bla::$var; // 2
?>
于 2009-07-29T05:58:28.477 回答
0
我认为是您正在寻找的关键字。static
在 PHP 中,没有什么可以阻止static
属性“更新”:它在第一次设置时被初始化,它在 PHP 脚本执行期间保持它的值,但你绝对可以将它设置为一个新值。
于 2009-07-29T06:04:26.903 回答