从属性引用中获取类名

时间:2013-05-15 13:26:12

标签: php

我想知道你是否可以从PHP中的属性引用中获取类名和属性名?

class Test {
    public static $TestProp;
}
GetDoc(& Test::$TestProp);
function GetDoc($prop) {
    $className = getClassName($prop);
    $propertyName = getPropertyName($prop);
}

我正在寻找的是,是否可以创建函数getClassName和getPropertyName?

3 个答案:

答案 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

的内置函数