问题描述
假设我有一个包含多个日期的类,这些日期存储为DateTime变量
class gweek
{
public $today; // when class is instatitated;
public $tomorrow; // day of week
function assqlDate(){
// want to use this with each datetime variable
}
}
我想要做的是能够像sql日期一样访问每个Datetime变量
$var->today->assqlDate();
$var->tomorrow->assqlDate();
function getTodayAssqlDate(){
return $this->Today->format ("Y-m-d");
function getTomorrowAssqlDate(){
return $this->Today->format ("Y-m-d");
似乎可以在一个类的多个成员上操作的getter函数优于每个变量的不同getter函数。我想念什么吗?
解决方法
您的getter函数如何随时知道您对哪个特定日期感兴趣?如果您不介意将其传递给变量,则它可以同时在两个变量上运行:
class gweek {
function asSQLDate($which) {
if ($which === "today") {
// return $this->today formatted
} else {
// return $this->tomorrow formatted
}
}
}
$var->asSQLDate("today");
但是,如果$today
和$tomorrow
是DateTime
的实例,则它们已经具有可以使用的format()
方法:
$var->today->format("Y-m-d H:i:s");
您甚至可以扩展DateTime
来为此添加速记函数,并在设置$today
和$tomorrow
变量时使用它:
class SqlDateTime extends DateTime
{
function asSQLDate() {
return $this->format("Y-m-d H:i:s");
}
}
$var->today = new SqlDateTime("today");
$var->tomorrow = new SqlDateTime("tomorrow");
echo $var->today->asSQLDate();
// "2020-08-22 00:00:00"
echo $var->tomorrow->asSQLDate();
// "2020-08-23 00:00:00"
,
我不知道这是否是最优雅的解决方案,但我创建了一个类(dmdDate),该类包含DateTime变量并具有asSQLDate函数。
然后在我的主课中,像这样使用该课
class gweek
{
public $today;
public $tomorrow; // day of week
public function __construct($time)
{
$this->today = new dmdDate($time);
$this->tomorrow = new dmdDate($this->today->date->modify("+1 day"));
}
} //课程结束
我可以说
$time = new DateTimeImmutable();
$week = new gweek($time);
echo $week->today->asSQLDate(),br;
echo $week->tomorrow->asSQLDate ("Y-m-d");
到目前为止,这可以按预期进行。敬请关注