我有一个私有成员“描述”的类,但提出了一个setter:
class Foo {
private $description;
public function setDescription($description) {
$this->description = $description;
}
}
我在变量中有成员的名字。我想动态访问该字段。如果该领域只是公开我可以做:
$bar = "description";
$f = new Foo();
$f->$bar = "asdf";
但我不知道该怎么办我只有一个二传手。
答案 0 :(得分:8)
<?php
$bar = "description";
$f = new Foo();
$func="set"+ucwords($bar);
$f->$func("asdf");
?>
答案 1 :(得分:1)
试试这个:
$bar = 'description';
$f = new Foo();
$f->{'set'.ucwords($bar)}('test');
答案 2 :(得分:0)
使用魔术套牌
class Foo {
private $description;
function __set($name,$value)
{
$this->$name = $value;
}
/*public function setDescription($description) {
$this->description = $description;
}*/
}
但是通过这种方式,如果您只是想要描述使用此
,那么您的所有私有属性将充当公共属性class Foo {
private $description;
function __set($name,$value)
{
if($name == 'description')
{ $this->$name = $value;
return true;
}
else
return false
}
/*public function setDescription($description) {
$this->description = $description;
}*/
}
答案 3 :(得分:0)
此功能可以完成这项工作:
private function bindEntityValues(Product $entity, array $data) {
foreach ($data as $key => $value){
$funcName = 'set'+ucwords($key);
if(method_exists($entity, $funcName)) $entity->$funcName($value);
}
}