TLDR:
$date1 = new DateTime();
$date2 = (clone $date1)->modify('+3 years');
(Shallow copy is enaugh - डीप कॉपी-इंग डेटटाइम बनाता है (वर्तमान में कोई मतलब नहीं )
इतना ही आसान :)
स्पष्टीकरण "php एक अन्य डेटाटाइम से डेटाइम ऑब्जेक्ट बनाएँ":
clone
कीवर्ड नियमित बनाता उथले (क्यों => नीचे देखें) इस मामले के लिए enaugh - प्रतिलिपि
- इसके साथ लपेटकर
()
नव निर्मित वस्तु को वापस करके अभिव्यक्ति का मूल्यांकन करता हैclone
->modify()
इसलिए कहा जाता है और नई वस्तु को संशोधित करता है
DateTime::modify(...)
डॉक्स:
विफलता के लिए विधि जंजीर या FALSE के लिए DateTime ऑब्जेक्ट देता है।
$date2
अब नव निर्मित और संशोधित क्लोन / कॉपी शामिल है, जबकि $date1
अपरिवर्तित रहता है
आपको यहां गहरी प्रतिलिपि की आवश्यकता क्यों नहीं है:
दीप प्रतिलिपि / क्लोन केवल आवश्यक है, जब आपको उन संपत्तियों के लक्ष्यों को कॉपी करने की आवश्यकता होती है जो संदर्भ हैं , लेकिन यह:
class TestDateTime extends DateTime{
public function test(){
//*this* way also outputs private variables if any...
var_dump( get_object_vars($this) );
}
}
$test = (new TestDateTime())->test();
आउटपुट:
array(3) {
["date"]=>
string(26) "2019-08-21 11:38:48.760390"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
इसलिए कोई संदर्भ नहीं हैं, बस सरल प्रकार => गहरी प्रतिलिपि की आवश्यकता नहीं है।