2011-01-24 19 views
14

StdClass nesneleri dizim var. Bir değişkene bir tane atadığımda, değişkeni kopyalamaz, bunun yerine orijinal değişkeni referans alır.PHP'de bir değişkenin bir kopyasını nasıl oluşturuyorsunuz?

for ($i = 0, $len = count($rows); $i < $len; $i++) 
{ 
    $row = $rows[$i]; 
    echo $rows[$i]->games; 
    $row->games = 'test'; 
    echo $rows[$i]->games; 
} 

ilk eko, normal değerini verirken, ikinci yankı çıkışları "test": My kod böyledir. Özelliği $row (kopyalanmalı) üzerinde ayarlamama rağmen, aslında bu onu özgün dizi öğesinde ayarlıyor.

Neden bu, ve aslında bir kopyasını nasıl oluşturabilirim, böylece kopyayı değiştirmek orijinali değiştirmez mi?

cevap

37

clone anahtar sözcüğünü kullanın. Önemli

$copy = clone $object; 

not:

bir nesne klonlanmış

, PHP 5 nesnenin tüm özelliklerinin yüzeysel bir kopyasını gerçekleştirecektir. Diğer değişkenlere referans olan özellikler referans olarak kalacaktır.

güzel bir sihirli yöntem ile gelir: Bir __clone() yöntemi tanımlanması durumunda klonlama sonra, yeni oluşturulan nesnenin __clone() yöntemi çağrılır tamamlandıktan sonra

, izin Değiştirilmesi gereken tüm gerekli özellikler.

İlgili konular