如何访问类的静态成员?

2022-08-30 10:50:49

我正在尝试访问类的静态成员。

我的班级是:

class A
{
    public static $strName = 'A is my name'
    public function xyz()
    {
        ..
    }
    ..
}
//Since I have bunch of classes stored in an array
$x = array('A');
echo $x::$strName;

我在打印时遇到错误。如何打印“A是我的名字”


答案 1

如果 是一个类,则可以直接通过 访问它。AA::$strName

class A {
    public static $strName = 'A is my name';
}

echo A::$strName; // outputs "A is my name"

更新:

根据数组中的内容,我喜欢将其定义为类对象还是类文本可能是一个因素。我通过以下方式区分这两个术语:

$objClasses = array(new A(), new B()); // class objects
$myClasses = array('A','B');           // class literals

如果您采用类文本方法,那么在 PHP5.2.8 中使用循环时,我在使用范围解析运算符时会遇到语法错误。foreach

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

简而言之,一旦我们有更多关于您想做什么的信息,我们就可以继续提供更好的答案。


答案 2

如果需要 PHP5.2 的工作版本,可以使用反射来访问类的静态属性。

class A {
    static $strName= '123';
}

$lstClass = array('A');

foreach ($lstClass as $value) {
    $c = new ReflectionClass($value);
    echo $c->getStaticPropertyValue('strName');
}

演示 : http://ideone.com/HFJCW


推荐