PHP には、他の言語で static のように機能するクラスの変数の型があるかどうか疑問に思っています。つまり、同じクラスのすべてのオブジェクトが同じ変数を使用し、1 つのオブジェクトで更新されると、すべてのオブジェクトで更新されるということです。静的はすべてのオブジェクトで共有されるため近いですが、更新できるようにする必要があります。これにはグローバルを使用する必要がありますか?
6 に答える
正しい答えは、PHP には final に相当するものはありませんが、とにかく最初に必要だったのはstaticのようです。
staticには、特定のインスタンスに関連付けられていないため、クラスのすべてのインスタンスで同じ値を持つというプロパティがあります。
::演算子を使用してアクセスする必要があります。静的であるため、 ->を使用できないためです。
私は静的があなたが望むものだと思います。静的変数を更新できます。「静的コンテキスト」で行う必要があります (つまり、:: 演算子を使用します。
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
静的プロパティを更新できます:
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
定数という名前の PHP ファイルに変数を作成するだけです。
--Constants.php-- $DATABASE_NAME = "mysql"
ファイルにファイルを含めます。その値を変更できます。それはあなたが望むものに近づきますが、定数は変更されることを意図していないため、それらを定数と呼ぶのは良くありません。それが私を混乱させたものです:)。
変数を静的にすることが、あなたが説明したものに対して機能しない理由がわかりません(ただし、キーワード 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
?>
探しているキーワードだと思います。static
PHP では、プロパティが「更新」されるのを妨げるものは何もありませんstatic
。最初に設定されたときに初期化され、PHP スクリプトの実行中に値が保持されますが、新しい値に設定することは間違いありません。