2009-07-29 57 views
7

我想知道PHP是否有類型的變量在類似其他語言中的靜態功能。我的意思是同一個類的所有對象都使用相同的變量,當它更新時,它會更新每個對象。靜態是關閉的,因爲它在所有對象中共享,但我需要能夠更新它。我必須爲此使用全局變量嗎?什麼是其他語言中的靜態變量的PHP等價物?

+0

從什麼時候你不能更新靜態屬性? – jason 2009-07-29 05:55:57

+0

靜態變量可以修改... – 2009-07-29 05:56:03

回答

3

我覺得靜是你想要的。您可以更新一個靜態變量,你就必須做一個 「靜態上下文」(即使用::運算

class Class1 { 
    protected static $_count = 0; 

    public function incrementCount() { 
     return self::$_count++; 
    } 
} 

$instance1 = new Class1(); 
$instance2 = new Class1(); 
var_dump($instance1->incrementCount(), $instance2->incrementCount()); 

將輸出:。

INT 0

INT 1

0

您可以簡單地在PHP文件中創建變量,名爲Constants。

--Constants.php-- $ DATABASE_NAME = 「MySQL的」

,並在文件中包含該文件。你可以改變它的價值。它接近你想要的,但不好稱它們爲常量,因爲常量不會被改變,這就是我困惑的原因:)。

0

我不明白爲什麼使變量靜態不適用於你所描述的(但它與關鍵字最終沒有關係)?

<?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 

?> 
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 
0

我覺得static您正在查找的關鍵字。

並沒有什麼阻止一個static來自beeing的「更新」屬性,在PHP中:它在第一次被設置時被初始化,它在執行PHP腳本時保持它的值,但是你可以將它設置爲一個新的值。

6

正確的答案是,在PHP中沒有與final相同的內容,但是靜態的看起來像你想要的東西無論如何。

static具有它將在類的所有實例中具有相同值的屬性,因爲它不受特定實例限制。

您將需要使用::運營商來訪問它,因爲是靜態的,你不能使用- >

相關問題