2009-07-29 11 views
7

PHPに、他の言語で静的な機能を持つクラスに変数の型があるのだろうかと思います。そして、私は同じクラスのすべてのオブジェクトが同じ変数を使用していることを意味し、1つで更新されると、すべてのオブジェクトが更新されます。 Staticはすべてのオブジェクトで共有されているため密接ですが、更新できるようにする必要があります。このためにグローバルを使用する必要がありますか?他の言語の静的変数と同等のPHPは何ですか?

+0

静的プロパティはいつ更新できますか? – jason

+0

静的変数は変更できます。 –

+2

Const変数は変更できません。静的変数は可能です。 – Extrakun

答えて

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

これが問題でした。私は::の代わりに$ thisを使っていました。 – fent

0

単純に変数をConstantsという名前のPHPファイルに作成することができます。

--Constants.php-- $ DATABASE_NAME = "mysqlの"

とは、ファイル内のファイルが含まれています。その値を変更することができます。それはあなたが望むものに近くなりますが、定数が変更されることを意図していないので定数と呼ぶのは良くありません。それは私を混乱させるものです。

0

なぜ静的変数をあなたが記述したものに対して機能しないのか分かりません(ただし、キーワード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 

?> 
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 あなたが探しているキーワードだと思うそして01を防ぐ何もありませんはPHPでbeeingから更新されたプロパティで、PHPでは設定されたときに初期化され、PHPスクリプトの実行中にその値が保持されますが、新しい値に設定することは間違いありません。

6

正解は、最終的にはPHPに相当するものがないことですが、の静的は、とにかく最初のものと同じように思えます。

静的は、特定のインスタンスに結び付けられていないため、クラスのすべてのインスタンスで同じ値を持つというプロパティを持っています。

あなたは、静的であること、あなたが使用することはできませんので、それをアクセスするための::演算子を使用する必要があります - >を。

関連する問題