7

我想知道 PHP 在类中是否有一种变量,其功能类似于其他语言中的静态变量。我的意思是同一类的所有对象都使用相同的变量,并且当它更新一个时,它会更新每个对象。静态很接近,因为它在所有对象中共享,但我需要能够更新它。我必须为此使用全局变量吗?

4

6 回答 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 回答