我是一種新的以面向對象的開發,我創建一個應用程序作爲一種面向對象的程序,你可以請提供我舉幾個關於如何正常使用PHP的克隆方法的例子,現實生活中的例子是首選。
我想更全面地理解相關的概念。
謝謝,
我是一種新的以面向對象的開發,我創建一個應用程序作爲一種面向對象的程序,你可以請提供我舉幾個關於如何正常使用PHP的克隆方法的例子,現實生活中的例子是首選。
我想更全面地理解相關的概念。
謝謝,
這裏是一個例子,我需要在前一天克隆一個對象。我需要有兩個DateTime對象,一個from date
和一個to date
。它們可以在URL參數中指定,但是可以省略其中的任何一個,我需要將它們設置爲默認值。
下面的例子已經被簡化了一些,所以在下面給出的實現中存在缺陷,但它應該給你一個體面的想法。
問題出在DateTime :: modify方法。讓我們假設用戶提供了一個日期從,但是不是一個到日期。因此,我們將設置爲日期從給定從日期起12個月。
// create the from date from the URL parameters
$date_from = DateTime::createFromFormat('d/m/Y', $_GET['from']);
DateTime類的特點是通過一些偏移量來修改自己的方法。所以人們可以假設以下工作。
$date_to = $date_from;
$date_to->modify('+12 months');
但是,這會導致兩個$date_from
和$date_to
是同一日期,即使例子出現在變量$date_from
複製到$date_to
,它實際上創造了參考到它,而不是一個副本。這意味着當我們調用$date_to->modify('+12 months')
時,它實際上修改了兩個變量,因爲它們都指向DateTime對象的同一個實例。
正確的方式做,這將是
$date_to = clone $date_from; // $date_to now contains a clone (copy) of the DateTime instance $date_from
$date_to->modify('+12 months');
克隆語句告訴PHP創建DateTime對象的新實例,並將其存儲在$date_to
。從那裏,呼叫修改只會改變$date_to
和$date_from
將保持不變。
該文檔從幾個例子開始:http://php.net/manual/en/language.oop5.cloning.php有沒有你不完全明白的東西? – Brad
是不是我不明白手冊說的是什麼,但我沒有看到我的實際水平的任何問題,我想知道在稍後的實施中使用幾個例子。 – Leonardo