繁体   English   中英

如何访问类的静态成员?

[英]How do I access static member of a class?

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

我的班级是:

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是我的名字'

如果A是一个类,您可以通过A::$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 它无需访问变量而无需实例化对象。

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

如果您想要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

你有一个语法错误,缺少分号,因为它是一个数组,你需要访问索引0,否则它将尝试调用类'数组'。

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

    public function xyz()
    {
        // left blank and removed syntax error
    }
}
$x = array('A');
echo $x[0]::$strName;

应该解决它。

UPDATE

如果要迭代数组以调用类变量:

$x = array('A', 'B');
foreach ($x as $class) {
     echo $class::$strName;
}

不知道为什么你会这么想,但你去了。 这已经过测试,没有错误被抛出, A is my name有效响应A is my name被收到。

编辑

显然这仅适用于PHP 5.3

我确实找到了下一个简单的解决方案,但不知道它是否是好的解决方案。

我的解决方案是:

eval('return '.$x[0].'::$strName;');

从类内部想要访问自己的静态数据成员,你也可以使用static ::而不是self ::

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM