16

たくさんのプロパティを持つオブジェクトがあります。一部のプロパティの名前は、同じテキスト文字列(私の例では「bullet」)で始まり、その後に整数が続きます。

次のようにプロパティ値を取得できます。

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

等々。

これらの最初の20個を取得するためにforループを作成しようとしていますが、現時点では次のようになっています。

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

4 に答える 4

18

これがあなたがそれをすることができる方法です:

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

オブジェクトの代わりに配列を使用する方が良い解決策になると思いますが。

于 2012-11-18T12:56:18.317 に答える
7

以前の回答は両方とも「試してみてください。うまくいかない場合は先に進んでください」というもので、非常に特殊な状況で機能しています。悲しいことに、PHP5を必要とするより一般的なアプローチを紹介します。

リフレクションについて少し

リフレクションを使用すると、オブジェクトまたはクラスをリフレクションして、それに関する有用な情報を抽出できます。特に、Reflectionを使用して、静的、実行時、または外出先で生成されたかどうかに関係なく、クラスに設定されたすべてのプロパティを取得できます。

これを行うには、次のようにReflectionオブジェクトを開始することから始めます(クラスオブジェクトが$ objectであると仮定します)。

$refObj = new ReflectionObject($object);

これにより、リフレクションインターフェイスが提供されます。便利なReflectionObject::getProperties()メソッドに注意してください。クラスに設定されているすべてのプロパティを取得できます(必要に応じて、public、protected、privateなどでフィルタリングできます)。これを正確に使用します。

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

終わり。完全に汎用的で、どこでも機能します。

于 2012-11-18T13:02:44.087 に答える
6
$var = 'myVariable';
$value = $object->$var;

PHPで名前でフィールドにアクセスするための正しい構文です。

あなたの場合、それは次のようになります:

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

     if ($objectName->$var)
     {
          echo $info->$var;
     }
}
于 2012-11-18T12:54:18.923 に答える
1

私のシステムでは、それは私がすることを許可していません

$myPropertyValue = $object->$property;

以下の関数を使用して、「変数」プロパティ名の値を取得できます。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;
        }
    }
}
?>
于 2015-06-15T12:51:03.207 に答える