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');
给了我吼声错误
Call to a member function setInfo() on a non-object
如何在汽车类设置$ make =' Toyota'之后更改setInfo()方法调用$car1->setInfo('make', 'Toyota')->setInfo('model', 'scp10');
我怎样才能打印这个对象 波纹管
make = Toyota
model = scp10
答案 0 :(得分:1)
您需要在方法的末尾添加return $this;
以进行类似链的调用。
答案 1 :(得分:1)
更改setInfo代码以返回自身,如:
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;
}
现在你可以链接这些函数,因为它自己返回。
如果您想按照自己的意愿调用它(例如$this->setInfo("make","Ford")
),则需要在is_array
上添加其他内容并添加可选参数,如上面的代码所示
答案 2 :(得分:1)
将所有答案合并为一个(好吧,除了@EaterOfCorpses):
<?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']);
请注意,如果您一次设置所有属性,则没有理由return $this
。
编辑添加:还包括Mark Baker的魔术吸气剂/设定者想法,只是为了它的乐趣。
答案 3 :(得分:0)
您应该只使用$car1->setInfo('make', 'Toyota')
一次。那是因为您创建了一辆汽车,然后设置了信息,然后您想将信息设置为信息,但您无法将信息设置为信息。
答案 4 :(得分:0)
答案 5 :(得分:0)
使用数组语法:$car1->setInfo(array('make', 'Toyota'))
答案 6 :(得分:0)
你可以在你的函数中返回$ this(如果你有php 5.4):
function setInfo($car_arr) {
...
return $this;
}