3

I was wondering if you could get the class name and property name from a property reference in PHP?

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

what I'm looking for is if it is possible to create the functions getClassName and getPropertyName?

4

3 回答 3

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__其用作类名的方便参考。

于 2013-05-15T14:27:26.743 回答
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->value 来获取值。如果我想将该值与另一个对象进行比较,我可以简单地这样做:

if($t->Name == "Test") { echo "It worked!!"; }

希望这不会太令人困惑,但这是对 PHP 的一次有趣的探索。

于 2013-05-17T02:43:02.240 回答
-1

PHP 有一个内置函数叫做 get_class

于 2013-05-15T14:16:15.927 回答