我正在尝试从动态类中访问 static 属性。
class A {
public static $myvar = 'A Class';
}
class B {
public static $myvar = 'B Class';
}
其他地方:
public function getMyVar($classname) {
return ??????::$myvar; // help here!!
}
$a = getMyVar('A'); // I want 'A Class'
$b = getMyVar('B'); // I want 'B Class'
我的问题:如何根据发送到getMyVar()
的内容访问$ myvar?
编辑:该课程可以是众多课程之一(比如50-100),所以我正在寻找一个简短的方法
我唯一的选择是让$myvar
不是静态的吗?
答案 0 :(得分:2)
我解决了。
静态变量可以通过以下方式访问:
public function getMyVar($classname) {
return $classname::$myvar;
}
这比预期的容易得多! :)
答案 1 :(得分:0)
这样的东西?
function getMyVar($classname) {
switch($classname) {
case 'A': return A::$myvar;
case 'B': return B::$myvar;
}
}
编辑:如果你有这么多课程,也许你可以试试这个?
function getMyVar($classname) {
eval('$var='.$classname.'::$myvar;');
return $var;
}
答案 2 :(得分:0)
这与之前的答案类似,但执行一些完整性检查以确保您尝试访问的内容存在,并且是有效的对象引用。
保存到 demo.php ,chmod +x demo.php
&& ./demo.php
。
#!/usr/bin/php
<?php
class A {
public static $myvar = 'A Class';
public static $test1 = 'TEST_VALUE_1';
public static $test2 = 'TEST_VALUE_2';
}
class B {
public static $myvar = 'B Class';
}
/**
* Gets a static variable from the specified class.
* Returns FALSE if the property or class does not exist, otherwise returns the value of the property.
* @param string|object $className Can be either the class name (string) or an object (i.e., "A" or A).
* @param string $varName
* @return mixed|boolean
*/
function getClassStaticVar($className, $varName) {
if ((is_string($className) && class_exists($className) ) || is_object($className))
if (property_exists($className, $varName)) {
return $className::$$varName;
}
return FALSE; //if your property value is potentially FALSE, you might want to return another value here, like NULL.
}
function getMyVar($className) {
if (is_string($className) || is_object($className)) //is className a string or object reference?
return getClassStaticVar($className, 'myvar'); // --or-- return $className::$myvar;
return FALSE;
}
$a = getMyVar('A'); // I want 'A Class'
$b = getMyVar('B'); // I want 'B Class'
//in real code, you'd check if $a/$b === FALSE here. (see comment in getClassStaticVar() above)
echo ($a===FALSE ? 'Property/Class not found' : $a) . PHP_EOL;
echo $b . PHP_EOL;
echo getClassStaticVar("A", 'test1') . PHP_EOL;
echo getClassStaticVar(new A(), 'test2') . PHP_EOL;