- Katılım
- 2 Mar 2015
- Konular
- 59,185
- Mesajlar
- 88,383
- Online süresi
- 4ay 14g
- Reaksiyon Skoru
- 14,227
- Altın Konu
- 2,398
- Başarım Puanı
- 1,051
- TM Yaşı
- 11 Yıl 1 Ay 21 Gün
- MmoLira
- 694,336
- DevLira
- 234
Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!
"$obj1 = $obj2" gibi bir PHP ifadesi yalnızca bellekte aynı nesneye başka bir referans oluşturur. Bu nedenle, öznitelikteki değişiklikler hem orijinal hem de kopya nesnede yansır. PHP'deki clone anahtar sözcüğü bir nesnenin yüzeysel bir kopyasını oluşturur.
$obj2 = $obj1
Orijinal nesnede meydana gelen değişiklikler yüzeysel kopyaya yansımaz.
Örnek
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
class foo {
var $var1 = 'Hello';
}
$x = new foo();
$y = $x; # reference copy
echo $x->var1 . " " . $y->var1 . PHP_EOL;
$x->var1 = "Hello World";
echo $x->var1 . " " . $y->var1 . PHP_EOL;
?>
Aşağıdaki çıktıyı üretecektir:
Hello Hello
Hello World Hello World
İlk durumda, $y $x'in sadece bir referans kopyasıdır . Bu nedenle, var1 özelliğindeki herhangi bir değişiklik her ikisine de yansır.
Ancak, $y'yi $x'in bir klonu olarak bildirirsek , orijinal nesnedeki herhangi bir değişiklik onun yüzeysel kopyasına yansımaz.
Örnek
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
class foo {
var $var1 = 'Hello World';
}
$x = new foo();
# shallow copy
$y = clone $x;
echo $x->var1 . " " . $y->var1 . PHP_EOL;
$x->var1 = "Hello PHP";
echo $x->var1 . " " . $y->var1 . PHP_EOL;
?>
Aşağıdaki çıktıyı üretecektir:
Hello World Hello World
Hello PHP Hello World
Örnek
Aşağıdaki kodda, myclass, adres sınıfının nesnesi olarak niteliklerden birine sahiptir. myclass'ın bir nesnesi atama yoluyla çoğaltılır. Gömülü adres nesnesinin değerindeki herhangi bir değişiklik her iki nesneye de yansıtılır, ancak name özelliğindeki değişiklik klonlanmış nesnede etkilenmez.
PHP:
<?php
class address {
var $city="Nanded";
var $pin="431601";
function setaddr($arg1, $arg2) {
$this->city=$arg1;
$this->pin=$arg2;
}
}
class myclass {
var $name="Raja";
var $obj;
function setname($arg) {
$this->name=$arg;
}
}
$obj1=new myclass();
$obj1->obj=new address();
echo "original object\n";
print_r($obj1);
echo "\n";
$obj2=$obj1; # reference copy
$obj1->setname("Ravi");
$obj1->obj->setaddr("Mumbai", "400001");
echo "after change: Original object\n";
print_r($obj1);
echo "\nCopied object\n";
print_r($obj2);
?>
Aşağıdaki çıktıyı üretecektir:
original object
myclass Object
(
[name] => Raja
[obj] => address Object
(
[city] => Nanded
[pin] => 431601
)
)
after change: Original object
myclass Object
(
[name] => Ravi
[obj] => address Object
(
[city] => Mumbai
[pin] => 400001
)
)
Copied object
myclass Object
(
[name] => Ravi
[obj] => address Object
(
[city] => Mumbai
[pin] => 400001
)
)
"Klon" Anahtar Kelimesini Kullanma
Sığ bir kopyada, orijinal nesnenin diğer değişkenlere referans olan tüm özellikleri referans olarak kalacaktır. Clone anahtar sözcüğü kopyalanan nesnelerin içerdiği nesneleri kopyalamaz.Şimdi myclass nesnesinin bir klonunu oluşturuyoruz, böylece $obj2 , $obj1'in klonu oluyor . $obj1'in name özelliğini Raja'dan Ravi'ye değiştiriyoruz ve ayrıca gömülü adres nesnesini de değiştiriyoruz. Özellik değişikliği klonuna yansımayacak, ancak başvurulan adres nesnesi değişecek.
Örnek
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
class address {
var $city="Nanded";
var $pin="431601";
function setaddr($arg1, $arg2) {
$this->city=$arg1;
$this->pin=$arg2;
}
}
class myclass {
var $name="Raja";
var $obj;
function setname($arg) {
$this->name=$arg;
}
}
$obj1=new myclass();
$obj1->obj=new address();
echo "original object\n";
print_r($obj1);
echo "\n";
$obj2=clone $obj1; # clone copy
$obj1->setname("Ravi");
$obj1->obj->setaddr("Mumbai", "400001");
echo "after change: Original object\n";
print_r($obj1);
echo "\nCopied object\n";
print_r($obj2);
?>
Aşağıdaki çıktıyı üretecektir:
original object
myclass Object
(
[name] => Raja
[obj] => address Object
(
[city] => Nanded
[pin] => 431601
)
)
after change: Original object
myclass Object
(
[name] => Ravi
[obj] => address Object
(
[city] => Mumbai
[pin] => 400001
)
)
Copied object
myclass Object
(
[name] => Raja
[obj] => address Object
(
[city] => Mumbai
[pin] => 400001
)
)
__clone() Yöntemini Kullanma
Clone anahtar sözcüğü nesnenin yüzeysel bir kopyasını oluşturur. Bir nesne klonlandığında, PHP nesnenin tüm özelliklerinin yüzeysel bir kopyasını gerçekleştirir. Diğer değişkenlere referans olan tüm özellikler referans olarak kalır. Bu nedenle, orijinal nesnede yapılan tüm değişiklikler klonlanan nesnede de görünür.Kopyalanan nesnenin otomatik olarak güncellenmesini engellemek istiyorsanız, __clone() metoduyla nesnenin derin bir kopyasını oluşturmamız gerekir. Bu PHP'deki sihirli metotlardan biridir.
Klonlama tamamlandıktan sonra, bir __clone() metodu tanımlanırsa, değiştirilmesi gereken gerekli özelliklere izin vermek için yeni oluşturulan nesnenin __clone() metodu çağrılır.
Örnek
Yukarıdaki örnekte, myclass'ın bir nesnesi var, onun niteliklerinden biri olan $obj, adres sınıfındaki bir nesneye referansı tutuyor. Derin bir kopya elde etmek için, myclass'taki __clone() sihirli yöntemini geçersiz kılıyoruz.
PHP:
<?php
class address {
var $city="Nanded";
var $pin="431601";
function setaddr($arg1, $arg2) {
$this->city=$arg1;
$this->pin=$arg2;
}
}
class myclass {
var $name="Raja";
var $obj;
function setname($arg) {
$this->name=$arg;
}
public function __clone() {
$this->obj = clone $this->obj ;
}
}
$obj1=new myclass();
$obj1->obj=new address();
echo "original object\n";
print_r($obj1);
echo "\n";
$obj2=clone $obj1; # cloned deep copy
$obj1->setname("Ravi");
$obj1->obj->setaddr("Mumbai", "400001");
echo "after change: Original object\n";
print_r($obj1);
echo "\nCloned object\n";
print_r($obj2);
?>
Artık orijinal nesnedeki değişikliklerin (adres niteliklerini değiştiriyoruz) klonlanmış nesneye yansımayacağını göreceksiniz, aşağıdaki çıktı bunu gösteriyor:
original object
myclass Object
(
[name] => Raja
[obj] => address Object
(
[city] => Nanded
[pin] => 431601
)
)
after change: Original object
myclass Object
(
[name] => Ravi
[obj] => address Object
(
[city] => Mumbai
[pin] => 400001
)
)
Cloned object
myclass Object
(
[name] => Raja
[obj] => address Object
(
[city] => Nanded
[pin] => 431601
)
)

