How do I access static member of a class?

天大地大妈咪最大 提交于 2019-11-26 23:06:04

问题


I am trying to access static member of a class.

my class is:

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;

I am getting error while printing. How can I print 'A is my name'


回答1:


If A is a class, you can access it directly via A::$strName.

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

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

Update:

Depending on what you have inside your array, whether its what I like to define as class objects or class literals could be a factor. I distinguish these two terms by,

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

If you go the class literals approach, then using a foreach loop with PHP5.2.8 I am given a syntax error when using the scope resolution operator.

foreach ($myClasses as $class) {
     echo $class::$strName;
  //syntax error, unexpected '::', expecting ',' or ';'
}

So then I thought about using the class objects approach, but the only way I could actually output the static variable was with an instance of an object and using the self keyword like so,

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;
    }
}

And then invoke that method when iterating,

foreach($objClasses as $obj) {
    echo $obj->getStatic();
}

Which at that point why declare the variable static at all? It defeats the whole idea of accessing a variable without the need to instantiate an object.

In short, once we have more information as to what you would like to do, we can then go on and provide better answers.




回答2:


If you want a working version for PHP5.2, you can use reflection to access the static property of a class.

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

$lstClass = array('A');

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

Demo : http://ideone.com/HFJCW




回答3:


You have a syntax error with missing semicolon and because it is an array you need to access the index of 0, or else it would be trying to call class 'Array'.

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;

Should fix it.

UPDATE

If you want to iterate over an array to call a class variable:

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

Not sure why you would want that, but there you go. And this has been tested, no errors were thrown, valid response of A is my name was received.

EDIT

Apparently this only works under PHP 5.3




回答4:


I do find next one simple solution but don't know whether its good one or not.

My soln is:

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



回答5:


From inside a class and want to access a static data member of its own you can also use static:: instead of self::



来源:https://stackoverflow.com/questions/3818333/how-do-i-access-static-member-of-a-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!