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']);