3

PHP のプロパティ参照からクラス名とプロパティ名を取得できるかどうか疑問に思っていました。

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

私が探しているのは、関数 getClassName と 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 に答える