がクラスの場合A
、を介して直接アクセスできますA::$strName
。
class A {
public static $strName = 'A is my name';
}
echo A::$strName; // outputs "A is my name"
アップデート:
配列内にあるものに応じて、クラスオブジェクトまたはクラスリテラルとして定義したいものが要因になる可能性があります。私はこれらの2つの用語を次のように区別します。
$objClasses = array(new A(), new B()); // class objects
$myClasses = array('A','B'); // class literals
クラスリテラルアプローチを使用する場合、foreach
PHP5.2.8でループを使用すると、スコープ解決演算子を使用すると構文エラーが発生します。
foreach ($myClasses as $class) {
echo $class::$strName;
//syntax error, unexpected '::', expecting ',' or ';'
}
そこで、クラスオブジェクトアプローチを使用することを考えましたが、静的変数を実際に出力できる唯一の方法は、オブジェクトのインスタンスを使用し、そのself
ようなキーワードを使用することでした。
class A {
public static $strName = 'A is my name';
function getStatic() {
return self::$strName;
}
}
class B {
public static $strName = 'B is my name';
function getStatic() {
return self::$strName;
}
}
そして、反復するときにそのメソッドを呼び出します。
foreach($objClasses as $obj) {
echo $obj->getStatic();
}
その時点で、なぜ変数static
を宣言するのですか?これは、オブジェクトをインスタンス化する必要なしに変数にアクセスするという考え全体を打ち負かします。
要するに、あなたが何をしたいのかについてより多くの情報が得られたら、私たちは次に進んでより良い答えを提供することができます。