好吧,让我们说我有一个名为test
的字符串,我知道这个字符串实际上是在我的一个类中用作属性名。有没有办法找出哪个类的名称为test
?
这样的事情可能是:
class Foobar {
private $foo;
}
class Bazbar {
private $test;
}
$attr_name = 'test';
echo get_class_name_by_attr($attr_name); // Would output Bazbar
快速即兴创作此代码......
有没有办法在PHP中实现这一点?
答案 0 :(得分:3)
我同意那些认为你必须重新分析问题的人。但问题的答案是这样的:
foreach (get_declared_classes() as $class) {
if (property_exists($class, 'test')) {
echo $class. " has the propriety test.\n";
}
}
答案 1 :(得分:0)
这应该适合你:
(我仍然问自己为什么需要这个,但我希望这有帮助)
<?php
class Foobar {
private $foo;
}
class Bazbar {
private $test;
}
$attr_name = "test";
$check_classes = array("Foobar", "Bazbar");
foreach($check_classes as $k => $v) {
$obj = new $v();
$obj = new ReflectionClass($obj);
$classes[] = $obj->getProperties(ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED | ReflectionProperty::IS_PRIVATE);
}
foreach($classes as $class) {
foreach($class as $prop) {
if($prop->getName() == $attr_name)
echo "Class: " . $class[0]->class. " Prop: " . $prop->getName();
}
}
?>
输出:
Class: Bazbar Prop: test
这里我添加了一个数组,在这些类中搜索形成attr。名称。为此,我使用反射。你可以在这里阅读:http://uk.php.net/manual/en/book.reflection.php