我有一个PHP类,它存储一个复杂的多维数组,而不是将单独的访问器方法作为接口写入这个数组,我决定使用PHP5的__get方法。PHP __get()最佳实践
当我开始写这些魔法访问器时,它给我穿上了我不知道什么是最佳实践,所以我想我会问。 __get()是否是一个大的if/else结构?
我已经包括了类的参考小片段:
<?php
class Project {
private $data;
public function __construct($d) {
$this->data = $d;
}
public function __get($val) {
if ($val === 'title')
return $this->data['info']['projectName'];
else if ($val === 'id')
return $this->data['info']['projectID'];
else if ($val == 'health') {
switch($this->data['info']['health']) {
case 'OT':
case 'NS':
case 'LR':
return 'Low Risk—Healthy';
break;
case 'CR':
return 'Critical Risk—Action Needed';
break;
default:
return 'Unknown';
}
}
}
}
?>
然后,我只是像访问数据:
$o = new Project($array);
echo $o->title; #etc
这看起来像一个噩梦维持后,而不是说延长怪物。 – aefxx 2010-03-05 22:05:01
不要在__get()方法中声明if-else语句。我会说你应该尽量避免使用else-if语句。 – caoglish 2017-08-03 00:48:27