php getter函数可以对类的所有成员起作用吗?

问题描述

假设我有一个包含多个日期的类,这些日期存储为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();

但是我看到的唯一方法是为每个变量编写一个单独的getter

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$tomorrowDateTime的实例,则它们已经具有可以使用的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");

到目前为止,这可以按预期进行。敬请关注