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…

Yorumlar

  1. By doğan

    Cevapla

    • By emrtnm

      Cevapla

Bir Cevap Yazın

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

Solve : *
27 + 29 =