我对 PHP 中的指针有疑问。
在 A 类中,我有:
protected $startDate;
public function getStartDate()
{
return $this->startDate;
}
public function setStartDate($startDate)
{
$this->startDate = $startDate;
}
我在我的代码中使用它是这样的:
$day = new \DateInterval('P1D');
$a->startDate->add($day);
结果:“无法访问受保护的财产”(如预期的那样)
如果我尝试:
$day = new \DateInterval('P1D');
print_r($a->getStartDate());
$date = $a->getStartDate();
$date->add($day);
print_r($a->getStartDate());
die();
结果 :
DateTime Object
(
[date] => 2012-11-08 00:00:00
[timezone_type] => 3
[timezone] => Europe/Paris
)
DateTime Object
(
[date] => 2012-11-09 00:00:00
[timezone_type] => 3
[timezone] => Europe/Paris
)
我在没有设置器的情况下修改了受保护的值
我认为我修改了日期值,因为它是由 getter 方法作为指针返回的。我不明白如何在不使用 setter 方法的情况下修改受保护的值。
你知道为什么吗?
谢谢
编辑:好的,正如我解释的那样,我的 A 类的成员是 DateTime 对象。如果我希望它真正受到保护,也许我必须创建一个“时间戳”成员并返回我的时间戳的新 DateTime(或克隆成员)。
再次感谢 !