Nesne Kopyalama

Bir nesnenin tüm özelliklerinin aynen kopyalanarak çoğaltılması her zaman istenilen durum değildir. Kurucuların kopyalanması iyi bir örnektir, bir GTK penceresini temsil eden bir nesneniz varsa ve bu nesne GTK penceresine ait özkaynağı tutuyorsa, bu nesnenin kopyasını oluşturduğunuzda, yeni nesnenin önceki pencere ile aynı özelliklere sahip yeni bir pencereye sahip olmasını ve önceki nesne ile aynı şekilde pencereye ait özkaynağı tutuyor olmasını isteyebilirsiniz. Bir diğer örnek, nesneniz kullandığı başka bir nesneye ait bir gönderim tutuyorsa, ebeveyn nesne kopyalandığında diğer nesnenin de yeni bir örneğinin oluşturulmasını isteyebilirsiniz, yani ebeveynin kopyasının kendine ait ayrı bir kopyası olur.

Bir nesnenin kopyası (mümkünse nesnenin __clone() yöntemini çağıran) clone anahtar sözcüğü kullanılarak oluşturulur.

 $nesnenin_kopyası = clone $object; 

Bir nesne kopyalandığında, PHP nesnenin tüm özelliklerinin yüzeysel bir kopyasını çıkartacaktır. Diğer değişkenlere birer gönderim olan tüm özellikler gönderim olarak kalacaktır.

__clone(): void

Kopyalama tamamlanır tamamlanmaz, bir __clone() yöntemi tanımlanmışsa, değişmesi gereken lüzumlu tüm özelliklere izin vermek için yeni oluşturulan nesnenin __clone() yöntemi çağrılacaktır.

Örnek 1 - Bir nesnenin kopyalanması

<?php
class AltNesne
{
static
$örnek_sayısı = 0;
public
$örnek;

public function
__construct()
{
$this->örnek = ++self::$örnek_sayısı;
}

public function
__clone()
{
$this->örnek = ++self::$örnek_sayısı;
}
}

class
KopyalanabilirNesnem
{
public
$nesne1;
public
$nesne2;

function
__clone()
{
// this->nesne1'in bir kopyasını oluşturmak için

Yukarıdaki örneğin çıktısı:

 Özgün Nesne: KopyalanabilirNesnem Object ( [nesne1] => AltNesne Object ( [örnek] => 1 ) [nesne2] => AltNesne Object ( [örnek] => 2 ) ) Kopya Nesne: KopyalanabilirNesnem Object ( [nesne1] => AltNesne Object ( [örnek] => 3 ) [nesne2] => AltNesne Object ( [örnek] => 2 ) ) 

Yeni kopyalanmış bir nesnenin üyesine tek bir ifadede erişmek mümkündür:

Örnek 2 - Yeni kopyalanmış nesnenin üyesine erişim

<?php
$dateTime
= new DateTime();
echo (clone
$dateTime)->format('Y');
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

 2016 
To Top