İçeriğe geç

Php Oop Dersleri 9 – Nesne Klonlama

Merhaba arkadaşlar,

Php oop derslerine kaldığımız yerden devam ediyoruz. Bir önceki yazımızda Nesne Arayüzleri‘nden bahsetmiştik bu yazımızda ise oop mimarisinde nesne klonlama olayını ele alacağız.

Nesne klonlama PHP 5 ile birlikte gelmiştir ve pek fazla bir değişime uğramamıştır. En basit manasıyla bir sınıfı yeniden tanımlamadan kopyalamamızı sağlar.

Bir sınıf çağırdığımızda sınıfın RAM’de tutulduğunu daha önceki yazılarımızda söylemiştik. Bir sınıfı defalarca çağırmak sistem üzerinde gereksiz bir yük oluşturur ve hantal bir sisteme sahip olursunuz. Maliyet artar. En önemlisi canınız sıkılır. Nesne klonlama tam olarak bunun için vardır. PHP topluluğu canımız sıkılmasın maliyetimiz artmasın diye bu olayı da düşünmüşler sağ olsunlar 🙂 Şimdi çok basit bir örnekle nesne klonlama konumuzu netleştirelim.


<?php

class Oop {

public function hi(){
echo "Hello World";
}

}

$sinif = new Oop();
$kopya = clone $sinif;

?>

Bu örneğimiz ile konuyu çok güzel özetleyebiliriz. Klasik olarak ne yaptığımıza şöyle bir bakalım. Oop adında bir sınıf oluşturduk hi adında bir metot ekledik. Daha sonra $sinif değişkenine Oop sınıfını atadık. Ardından $kopya değişkenine clone $sinif diyerek Oop sınıfımızı bu değişkene kopyalamış olduk. Buradan anlaşıldığı üzere bir sınıfı kopyalamak için clone komutunu kullanıyoruz. Burada şunu belirtmekte fayda var. $kopya = $sinif; şeklinde bir kullanım ile yukarı da yaptığımız olay kesinlikle aynı şey değildir. = işareti kullanılarak obje kopyalamak mümkün değildir ! Bu en az bilinen ve en çok yapılan hatalardan biridir. Eğer clone komutu yerine bu hatayı yaparsanız proje illa ki bir yerde patlar yada sınıflar doğru dürüst çalışmayabilir. Bu hatanın en kötü yanı da hata oluşturmaması. Bu yüzden de hatanın nereden kaynaklandığını bulmak maalesef zaman alıyor.

Php oop dersleri nesne klonlama konumuz bu kadar arkadaşlar. Bir sonraki yazımızda görüşmek üzere kendinize iyi bakın…

Kategori:PHP

2 Yorum

  1. doğan doğan

    Emeğiniz için teşekkürler, peki clone bizim ne işimize yarayacak 🙂 yani clone ile sınıfı kopyaladığımızda RAM’de depolanmayacak mı yada kullanım sonrası mı silinecek?

    • RAM’de herhangi bir yer tutmaz. Klonlanan sınıfıreferans alarak işlem yapılır. Mesela sınıf içinde sabit değer tutuyorsunuz diyelim. Sınıf başlatıldığı an bu değer sıfırdan başlasın. Yaptığınız her işlemde bu değeri bir artırdığınızı düşünün. Sınıfı başlattık ve 5 işlem yaptığımızda bu değer 5 oldu diyelim. New deyip sınıfı tekrar başlattığınızda bu değer 0 olur ancak klonlarsanız 5 den devam edersiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir