Koo*_*bin 39 php oop static class member
我正在尝试访问类的静态成员.
我的班级是:
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;
Run Code Online (Sandbox Code Playgroud)
我在打印时遇到错误.我怎么打印'A是我的名字'
Ant*_*ney 97
如果A是一个类,您可以直接通过它访问它A::$strName.
class A {
public static $strName = 'A is my name';
}
echo A::$strName; // outputs "A is my name"
Run Code Online (Sandbox Code Playgroud)
根据数组中的内容,我喜欢将它定义为类对象还是类文字可能是一个因素.我将这两个术语区分开来,
$objClasses = array(new A(), new B()); // class objects
$myClasses = array('A','B'); // class literals
Run Code Online (Sandbox Code Playgroud)
如果你使用类文字方法,那么使用foreachPHP5.2.8 的循环我在使用范围解析运算符时会出现语法错误.
foreach ($myClasses as $class) {
echo $class::$strName;
//syntax error, unexpected '::', expecting ',' or ';'
}
Run Code Online (Sandbox Code Playgroud)
那么我考虑使用类对象方法,但我实际输出静态变量的唯一方法是使用对象的实例并使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在迭代时调用该方法,
foreach($objClasses as $obj) {
echo $obj->getStatic();
}
Run Code Online (Sandbox Code Playgroud)
那时为什么要声明变量static呢?它失败了访问变量的整个想法,而无需实例化对象.
简而言之,一旦我们获得了更多关于您想做什么的信息,我们就可以继续提供更好的答案.
HoL*_*ieR 10
如果您想要PHP5.2的工作版本,可以使用反射来访问类的静态属性.
class A {
static $strName= '123';
}
$lstClass = array('A');
foreach ($lstClass as $value) {
$c = new ReflectionClass($value);
echo $c->getStaticPropertyValue('strName');
}
Run Code Online (Sandbox Code Playgroud)