我还发现访问对象属性很有用,其中属性名称因迭代器而异。 例如,我使用下面的模式来表示一组时间段:小时,天,月。
$periods=array('hour', 'day', 'month');
foreach ($periods as $period)
{
$this->{'value_'.$period}=1;
}
同样的模式也可用于访问类方法。 只需使用字符串和字符串变量以相同的方式构建方法名称。
您可以轻易地争辩只是按周期使用数组来存储值。 如果这个应用程序只是PHP,我会同意。 当类属性映射到数据库表中的字段时,我使用此模式。 虽然可以使用序列化将数组存储在数据库中,但是如果必须对各个字段建立索引,则效率低下并且没有意义。 我经常添加一个由迭代器键入的字段名称数组,以实现两全其美。
class timevalues
{
// Database table values:
public $value_hour; // maps to values.value_hour
public $value_day; // maps to values.value_day
public $value_month; // maps to values.value_month
public $values=array();
public function __construct()
{
$this->value_hour=0;
$this->value_day=0;
$this->value_month=0;
$this->values=array(
'hour'=>$this->value_hour,
'day'=>$this->value_day,
'month'=>$this->value_month,
);
}
}