为什么php扩展类属性没有更新

为什么php扩展类属性没有更新,php,class,methods,extend,Php,Class,Methods,Extend,我正在尝试按如下方式延长日期时间: class testdate extends DateTime { public $sqldate; public function __construct($time) { parent::__construct($time); //?? parent::modify(); $this->sqldate = $this->format ("Y-m-d"); } } echo "<

我正在尝试按如下方式延长日期时间:

class testdate extends DateTime {
public $sqldate;

public function __construct($time)
{
    parent::__construct($time);
    //?? parent::modify();

    $this->sqldate = $this->format ("Y-m-d"); 
}

}
echo "<pre>";

$td = new testdate("2020-08-23");
echo "       Today's Date: ".$td->format ("m/d/Y").br;
echo "   Today's SQL Date: ".$td->sqldate.br.br;
$td->modify ("+24 hour");
echo "    Tomorrow;s Date: ".$td->format ("m/d/Y").br;    // 1 day added correctly
echo " Tomorrow Formatted: ".$td->format ("Y-m-d").br;
echo "  Tomorrow Sql Date: ".$td->sqldate.br.br;          //not updated
print_r ($td);
类testdate扩展了DateTime{
公共日期$sqldate;
公共函数构造($time)
{
父项::_构造($time);
//??父::修改();
$this->sqldate=$this->format(“Y-m-d”);
}
}
回声“;
$td=新的测试日期(“2020-08-23”);
echo“今天的日期:.”td->格式(“m/d/Y”)。br;
echo“今天的SQL日期:”..td->sqldate.br.br;
$td->修改(“+24小时”);
echo“明天的日期:”..td->格式(“m/d/Y”)。br;//正确添加1天
echo“明天格式:”..td->格式(“Y-m-d”).br;
echo“明天Sql日期:”..td->sqldate.br.br//未更新
印刷费(td);
正如您在print_r语句中看到的,日期已更新,但sqldate未更新


我必须做些什么来确保扩展类的属性得到更新?

如前所述,实际问题是您只设置了构造函数中定义的
sqldate
属性,因此在实例化对象时只设置一次。您没有实现对该属性的更新

可以进一步扩展派生类,这样每次修改都会更新
sqldate
属性,但这样做既麻烦又容易出错。原因是该属性保留了冗余信息,这些信息需要同步

在这种情况下,使用格式化方法而不是同步性能要优雅得多:

       Today's Date: 08/23/2020
   Today's SQL Date: 2020.08.23

    Tomorrow's Date: 08/24/2020
 Tomorrow Formatted: 2020-08-24
  Tomorrow Sql Date: 2020.08.24

如前所述,实际问题是您只设置了在构造函数中定义的
sqldate
属性,因此在实例化对象时只设置一次。您没有实现对该属性的更新

可以进一步扩展派生类,这样每次修改都会更新
sqldate
属性,但这样做既麻烦又容易出错。原因是该属性保留了冗余信息,这些信息需要同步

在这种情况下,使用格式化方法而不是同步性能要优雅得多:

       Today's Date: 08/23/2020
   Today's SQL Date: 2020.08.23

    Tomorrow's Date: 08/24/2020
 Tomorrow Formatted: 2020-08-24
  Tomorrow Sql Date: 2020.08.24

您没有包括打印的结果。它将有助于显示这些回声的确切输出。
$this->sqldate
在调用
$td->modify()
时不会更新。您还需要重写
modify()
方法。或者让
sqldate
成为一个方法,而不是属性。您没有包含
print\r
的结果。它将有助于显示这些回声的确切输出。
$this->sqldate
在调用
$td->modify()
时不会更新。您还需要重写
modify()
方法,或者让
sqldate
成为方法,而不是属性。