我想知道你是否可以从PHP中的属性引用中获取类名和属性名?
class Test {
public static $TestProp;
}
GetDoc(& Test::$TestProp);
function GetDoc($prop) {
$className = getClassName($prop);
$propertyName = getPropertyName($prop);
}
我正在寻找的是,是否可以创建函数getClassName和getPropertyName?
答案 0 :(得分:2)
你想要的基本上是不可能的;一个属性不知道它的父结构。
我能想到的唯一理智是使用反射:
class Test
{
public static $TestProp = '123';
}
//GetDoc(& Test::$TestProp);
GetDoc('Test', 'TestProp');
function GetDoc($className, $propName)
{
$rc = new ReflectionClass($className);
$propValue = $rc->getStaticPropertyValue($propName);
}
在Test
班级中,您可以使用__CLASS__
作为班级名称的方便参考。
答案 1 :(得分:0)
我已经找到了让它工作的方法,为了让这个工作有很多魔力,但在我的情况下它是值得的。
class Test {
private $props = array();
function __get($name) {
return new Property(get_called_class(), $name, $this->props[$name]);
}
function __set($name, $value) {
$props[$name] = $value;
}
}
class Property {
public $name;
public $class;
public $value;
function __construct($class, $name, $value) {
$this->name = $name;
$this->class = $class;
$this->value = $value;
}
function __toString() {
return $value.'';
}
}
function GetClassByProperty($prop) {
return $prop->class.'->'.$prop->name;
}
$t = new Test();
$t->Name = "Test";
echo GetClassByProperty($t->Name);
这个例子是的,我知道它很复杂,但它完成了我想要的工作,将打印出“Test-> Name”我也可以通过说$ prop->值来获得价值。如果我想将值与另一个对象进行比较,我可以简单地执行此操作:
if($t->Name == "Test") { echo "It worked!!"; }
希望这不是太混乱,但这是对PHP的有趣探索。
答案 2 :(得分:-1)
Php有一个名为get_class
的内置函数