2016-11-10 80 views
0

我具有存储使用碳作为这种当前日期的对象:PHP对象被存储在变量作为参考而不是值

class Events { 

    public $monthRange = 12; 

    public $today; 

    public function __construct() { 
    $this->today = Carbon::now(); 
    } 
} 

我具有延伸该类我想要的一类d = $这-今天设置的变量$ a为这样:

namespace Events; 

use Carbon\Carbon; 

class EventsData extends Events { 

    public $monthsNames = [ 
    "1" => "January", 
    "2" => "February", 
    "3" => "March", 
    "4" => "April", 
    "5" => "May", 
    "6" => "June", 
    "7" => "July", 
    "8" => "August", 
    "9" => "September", 
    "10" => "October", 
    "11" => "November", 
    "12" => "December" 
    ]; 
    public function next_12_months() { 
    $next_12_months = []; 
    $d = $this->today; 

    array_push($next_12_months, $d->month); 
    for ($i = 0; $i <= ($this->monthRange - 1); $i++) { 
     $d = $d->addMonths(1); 
     if ($this->today != $d) { 
     array_push($next_12_months, $d->year); 
     } 
     var_dump($$this->today); //is being modified along with $d 
     var_dump($d); 
     $next_month = $d->month; 
     array_push($next_12_months, $next_month); 
    } 

    return $next_12_months; 
    } 
} 

的问题是,当我改性$ d这样$ D-> addMonths(1),它似乎$这 - >今天也得到修改。

如何防止这种情况发生?

+0

可能是有用的向我们展示'addMonths'方法,而不是'next_12_months'方法 – RiggsFolly

回答

1

克隆对象

$d = clone $this->today; 

更多关于克隆here

+0

您介绍一下为什么没有clone关键字时不会发生这种情况吗? 要传递参考,我的印象是,你必须添加&符号。 例如 $ d =&$ this->今天 – Philip

相关问题