Jac*_*ack 16 php syntax object
我有一个有很多属性的对象.一些属性的名称以相同的文本字符串开头(在我的示例中为"bullet"),后跟一个整数.
我可以按如下方式获取属性值:
echo $objectName->bullet1;
echo $objectName->bullet2;
echo $objectName->bullet3;
Run Code Online (Sandbox Code Playgroud)
等等.
我正在尝试编写一个for循环来获取前20个,现在它看起来有点像:
for ($i = 1; $i <= 20; $i++){
if ($objectName->bullet$i){
echo $objectName->bullet$i;
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我知道我可以写类似的东西
$bulletsArray[1] = $objectName->bullet1;
$bulletsArray[2] = $objectName->bullet2;
$bulletsArray[3] = $objectName->bullet3;
Run Code Online (Sandbox Code Playgroud)
一直到20,然后对它进行循环,但我敢肯定必须有一个更清洁的方式.有人能指出我正确的方向吗?
Bot*_*ázs 17
这是你如何做到的:
for ($i = 1; $i <= 20; $i++){
$propertyName = "bullet$i";
if ($objectName->$propertyName){
echo $info->$propertyName;
}
}
Run Code Online (Sandbox Code Playgroud)
虽然我认为使用数组而不是对象将是一个更好的解决方案.
以前的答案都有"尝试它,如果它不起作用,继续前进",并且正在为一个非常具体的情况而努力.让我给你一个更通用的方法,遗憾的是,需要PHP 5.
关于反思
Reflection允许您反映对象或类以提取有关它的有用信息.特别是,您可以使用Reflection来获取类中设置的所有属性,无论是静态,运行时还是随时生成.
要做到这一点,首先启动您的Reflection对象(假设您的类对象是$ object),如下所示:
$refObj = new ReflectionObject($object);
Run Code Online (Sandbox Code Playgroud)
现在,这将为您提供一个反射界面.请注意有用的ReflectionObject::getProperties()方法 - 它允许您获取在类中设置的所有属性(并且您可以按公共,受保护,私有等过滤...如果需要).我们将使用这个:
$yourNewArray = array();
$PropertyArray = $refObj->getProperties();
$pCount = count($PropertyArray);
for ($i = 0; $i < $pCount; $i++) {
$yourNewArray[$PropertyArray[$i]->getName()] = $PropertyArray[$i]->getValue($object);
}
Run Code Online (Sandbox Code Playgroud)
完成.完全通用,适用于任何地方.
$var = 'myVariable';
$value = $object->$var;
Run Code Online (Sandbox Code Playgroud)
是在PHP中按名称访问字段的正确语法.
在你的情况下,它看起来像这样:
for ($i = 1; $i <= 20; $i++)
{
$var = 'bullet'.$i;
if ($objectName->$var)
{
echo $info->$var;
}
}
Run Code Online (Sandbox Code Playgroud)