I have a PHP class that stores a complex multidimensional array, and rather than write individual accessor methods as an interface to this array I decided to use PHP5's __get method.
As I started to write these magic accessors it donned on me that I had no idea what best practices are here, so I thought I'd ask. Is one large if/else structure inside of __get() common?
I've included a small snippet of the class for reference:
<?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';
}
}
}
}
?>
Then I'm just accessing the data like:
$o = new Project($array);
echo $o->title; #etc