我有一个类有一个私有成员"description",但它提出了一个setter:
class Foo {
private $description;
public function setDescription($description) {
$this->description = $description;
}
}
我有一个变量中成员的名称。我想动态访问该字段。如果这个领域只是公开的,我可以做:
$bar = "description";
$f = new Foo();
$f->$bar = "asdf";
但如果我只有二传手,我不知道该怎么办。
<?php
$bar = "description";
$f = new Foo();
$func="set"+ucwords($bar);
$f->$func("asdf");
?>
试试这个:
$bar = 'description';
$f = new Foo();
$f->{'set'.ucwords($bar)}('test');
这个函数来完成任务:
private function bindEntityValues(Product $entity, array $data) {
foreach ($data as $key => $value){
$funcName = 'set'+ucwords($key);
if(method_exists($entity, $funcName)) $entity->$funcName($value);
}
}
使用魔术设置
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;
}*/
}