2013-12-07 2 views
1
$start = $this->getWeekRange($date); 
$end = $start->modify("+6 days"); 

echo $start->format("Y-m-d"); 
echo $end->format("Y-m-d"); 
exit(); 

ВЫВОД:PHP назначая переменные

2013-12-08 
2013-12-08 

должно быть

2013-12-02 
2013-12-08 

почему то, что оба $ начала и $ конец имеет то же значение? даже если я уже присвоил значение переменной $ start перед его модификацией, а затем присвоил ей значение $ end.

+0

'var_dump ($ начала, $ конца); ' –

ответ

0

попробовать это:

$start = $this->getWeekRange($date); 
$end = $start; 
$end->modify("+6 days"); 

echo $start->format("Y-m-d"); 
echo $end->format("Y-m-d"); 
exit(); 
+0

Я уже пробовал это. все еще не работает –

2

объектов назначаются по ссылке в PHP (и во многих других языках).

Это означает, что $end и $start указывают на один и тот же объект. Для того, чтобы получить клон этого объекта вы должны использовать clone:

$end = clone $start; 

Теперь у вас есть индивидуальный объект в $end, который имеет те же свойства, как $start; до вы вызываете методы или изменяете один из них.

Для примера, вы должны поместить эту строку во второй строке вашего примера и изменить эту строку:

$end = $start->modify("+6 days"); 

к:

$end->modify("+6 days"); 
+0

это сработало! этот подход - это лучшая практика? –

+0

Да, я пока не видел другого способа сделать это. Кроме того, использование чистых подходов к языку всегда хорошо. – DaGardner

Смежные вопросы