0

次のクラスで動的追加プロパティを出力する方法は?

class Car {

    function __construct() {
    }

    function setInfo($car_arr) {
            foreach ($car_arr as $key => $value) {
                $this->{$key} = $value;
            }
    }

   }

以下のようにクラスオブジェクトを設定します

$car1 = new Car();
$car1->setInfo(array('make' => 'Toyota', 'model' => 'scp10'));

$car2 = new Car();
$car2->setInfo(array('anme1' => 'value1', 'anme2' => 'value2'));

今、私は以下の車のオブジェクトを印刷したい

make = Toyota
model = scp10
4

5 に答える 5

2

試す :

$car1 = new Car();
$car1->setInfo(array('make' => 'Toyota', 'model' => 'scp10'));

echo $car1->make;
echo $car1->model;
于 2013-03-21T11:45:20.863 に答える
1

この回答で指摘したように、プロパティを明示的に保存することを検討してください。

<?php
class Car {
  private $data = array();

  function setInfo(array $carInfo) {
    foreach ($carInfo as $k => $v) {
      $this->data[$k] = $v;
    }
    return $this;
  }

  function __set($key, $val) {
    $this->data[$key] = $val;
  }
  function __get($key) {
    return $this->data[$key];
  }
}

$car = new Car();
$car->setInfo(array('make' => 'Toyota', 'warranty' => '5 years'));

もっと「きれい」だと思いますが、それはおそらく議論の余地があります。

于 2013-03-21T13:03:33.693 に答える
1
<?php
    class Car {

        function __construct() {
        }

        function setInfo($car_arr) {
                foreach ($car_arr as $key => $value) {
                    $this->{$key} = $value;
                }
        }

       }
    $car1 = new Car();
    $car1->setInfo(array('make' => 'Toyota', 'model' => 'scp10'));

    echo "Make value is : " . $car1->make. ", Model value is : ". $car1->model;
?>

上記のコード出力Make value is : Toyota, Model value is : scp10

于 2013-03-21T11:46:46.240 に答える
0

このPHPマジックメソッドのようなものを探していると思います

たとえば、これは次のとおりです。

<?php

class A
{
    public $var1;
    public $var2;

    public static function __set_state($an_array) // As of PHP 5.1.0
    {
        $obj = new A;
        $obj->var1 = $an_array['var1'];
        $obj->var2 = $an_array['var2'];
        return $obj;
    }
}

$a = new A;
$a->var1 = 5;
$a->var2 = 'foo';

eval('$b = ' . var_export($a, true) . ';'); // $b = A::__set_state(array(
                                            //    'var1' => 5,
                                            //    'var2' => 'foo',
                                            // ));
var_dump($b);

?>

これも役に立ちます。

于 2013-03-21T11:50:35.463 に答える
0

get_object_vars() を使用してすべてのプロパティを取得できます。

$vars = get_object_vars($car1);
foreach ($vars as $key => $value) {
  echo $key . ' = ' . $value . '<br />';
}
于 2013-03-21T11:54:30.293 に答える