PHP - 按变量获取对象属性

时间:2012-11-18 12:51:13

标签: php object syntax

我有一个有很多属性的对象。一些属性的名称以相同的文本字符串开头(在我的示例中为“bullet”),后跟一个整数。

我可以按如下方式获取属性值:

echo $objectName->bullet1;
echo $objectName->bullet2;
echo $objectName->bullet3;

等等。

我正在尝试编写一个for循环来获取前20个,现在它看起来有点像:

for ($i = 1; $i <= 20; $i++){
 if ($objectName->bullet$i){
  echo $objectName->bullet$i;
 }
}

但这不起作用。我知道我可以写点像

$bulletsArray[1] = $objectName->bullet1;
$bulletsArray[2] = $objectName->bullet2;
$bulletsArray[3] = $objectName->bullet3;

一直到20,然后对它进行for循环,但我确信必须有一个更清洁的方式。有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:17)

这是你可以做到的:

for ($i = 1; $i <= 20; $i++){
    $propertyName = "bullet$i";
    if ($objectName->$propertyName){
        echo $info->$propertyName;
    }
}

虽然我认为使用数组代替对象会是更好的解决方案。

答案 1 :(得分:6)

$var = 'myVariable';
$value = $object->$var;

是在PHP中按名称访问字段的正确语法。

在你的情况下,它看起来像这样:

for ($i = 1; $i <= 20; $i++) 
{
     $var = 'bullet'.$i;

     if ($objectName->$var)
     {
          echo $info->$var;
     }
}

答案 2 :(得分:6)

之前的答案都有“试一试,如果它不起作用,继续前进”,并且正在为一个非常具体的情况而努力。让我给你一个更通用的方法,遗憾的是,它需要PHP 5。

关于反思

Reflection允许您反映对象或类以提取有关它的有用信息。特别是,您可以使用Reflection来获取类中设置的所有属性,无论是静态的,在运行时还是在运行时生成的。

要做到这一点,首先启动您的Reflection对象(假设您的类对象是$ object),如下所示:

$refObj = new ReflectionObject($object);

现在这将为您提供一个反射界面。请注意有用的ReflectionObject::getProperties()方法 - 它允许您获取在类中设置的所有属性(并且您可以按公共,受保护,私有等过滤...如果需要)。我们将使用这个:

$yourNewArray = array();
$PropertyArray = $refObj->getProperties();
$pCount = count($PropertyArray);
for ($i = 0; $i < $pCount; $i++) {
   $yourNewArray[$PropertyArray[$i]->getName()] = $PropertyArray[$i]->getValue($object);
}

完成。完全通用,适用于任何地方。

答案 3 :(得分:1)

在我的系统中,它不允许我这样做

$myPropertyValue = $object->$property;

我仍然可以获得&#39;变量&#39;的价值。具有以下功能的属性名称;你可以在没有php抱怨语法或抛出错误的情况下设置$ property。

<?php
    class MyClass{
    public function getProperty($propertyName){
        $props=get_object_vars($this);
        if (array_key_exists($propertyName,$props)){
            return $props[$propertyName];
        }else{
            return FALSE;
        }
    }
}
?>