php中无需创建数组的对象访问

php中无需创建数组的对象访问,php,arrays,Php,Arrays,我试着像贝娄一样接近 class Car { function __construct() { // echo 'car con'; } function setInfo($car_arr) { foreach ($car_arr as $key => $value) { $this->{$key} = $value; } } } 这给了我一个错误

我试着像贝娄一样接近

class Car {


    function __construct() {
//        echo 'car con';
    }

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

    }

}
这给了我一个错误

$car1 = new Car();
$car1->setInfo('make', 'Toyota')->setInfo('model', 'scp10');
如何更改setInfo()方法调用
$car1->setInfo('make','Toyota')->setInfo('model','scp10')在那辆车之后设置$make='Toyota',就像那样

我怎样才能像这样打印这个对象 吼叫


您需要添加
返回$this
在链式调用的方法末尾。

您应该只使用一次
$car1->setInfo('make','Toyota')
。这是因为您创建了一辆汽车,然后设置了信息,然后您想将信息设置为信息,但无法将信息设置为信息。

更改设置信息代码以返回自身,如:

make = Toyota
model = scp10
现在您可以链接函数,因为它会自动返回

另外,如果您想按自己的意愿调用它(如
$this->setInfo(“make”,“Ford”)
),您需要在
is_数组中添加一个else,并添加一个可选参数,如上面代码所示,它被称为


作为setInfo()方法的最后一行

使用数组语法:
$car1->setInfo(数组('make','Toyota'))
您可以在函数中返回$this(如果您有php 5.4):


要将所有答案合并为一个答案(好吧,除了@eaterofcarbits):


在较低版本中不可能吗?@eaterofcar1->make='Toyota'
你非常接近,然后你删除了你需要的代码:(好了,我完成了。你到底想要什么?哈哈+1总结了所有的东西并提到我:)而且这段代码只在PHP5.4中有效,在PHP5.3中,这种创建数组的方式将使errorsGot进一步被采用。但是你是对的,它需要阅读PHP-5.3的
数组('make'=>'Toyota','warranty'=>'5 years')
,而不是你现在所做的是不可能的:
$this-${k}=$v
需要是
$this->{$k}=$v。如果可能的话,测试一下:你也可以把答案贴在这里;)我不想带着你回答的密码离开,呃,以前从未见过这种情况。这不是你链接的问题的一个措辞糟糕的重复吗?
make = Toyota
model = scp10
function setInfo($car_arr,$car_val=null) {

    if(is_array($car_arr)){
        foreach ($car_arr as $key => $value) {
            $this->{$key} = $value;
        }
    }else if(is_string($car_arr) && $car_val != null){
        $this->{$car_arr} = $car_val;
    }
    return $this;
}
return $this;
function setInfo($car_arr) {

   ...

   return $this;
}
<?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(['make' => 'Toyota', 'warranty' => '5 years']);