2) PHP の property には readonly 属性がないので、作ってみた。
function __get($name) {
//プロパティの取得
switch ($name) {
case 'days':
return $this->getDays();
break;
default:
throw new Exception('undefined propery : '.$name);
break;
};
}
function __set($name, $value) {
// readonly の実装
switch ($name) {
case 'days':
//これがないと __get で定義された property も値を変更できる
throw new Exception('readonly propery : '.$name);
break;
default:
//このクラスで定義されていない property はエラーとする
throw new Exception('undefined propery : '.$name);
break;
};
}
private function getDays() {
//基準日の元旦を 0 として、何日目かを返す
$base = new DateTime($this->format('Y').'-1-1');
return $this->diff($base)->days;
}
}
?>
※※※ 使い方 ※※※
$date = new myDateTime();
echo '今日は今年の '.($date->days + 1).' 日目です。';
$date = new myDateTime("2016-12-31");
echo '2016 年は '.($date->days + 1).' 日あります。';
?>