PHP OOP yöntemi ile özel gereksinimlere uygun sınıf ve nesne yapıları oluşturmak, web uygulamalarının daha etkili ve ölçeklenebilir olmasını sağlar Bu eğitimde PHP OOP kullanarak bu yapıları nasıl oluşturabileceğinizi öğrenebilirsiniz Detaylı örnekler ve pratik uygulamalarla becerilerinizi geliştirin

PHP programlama dilinin en önemli özellikleri arasında OOP (Object Oriented Programming) prensipleri yer almaktadır. Bu prensipler sayesinde, özel gereksinimlere uygun sınıf ve nesne yapıları oluşturulabilmekte ve programlama işlemleri daha verimli hale getirilmektedir. Bu makalede, PHP OOP prensipleri ile özel gereksinimlere uygun sınıf ve nesne yapıları oluşturma konuları detaylı şekilde ele alınacaktır.
OOP prensiplerine göre, sınıf ve nesne yapısı oluşturma işlemleri, genellikle sınıf yapısının özellikleri (properties) ve metodları (methods) şeklinde gerçekleştirilir. Bu sayede, her sınıfın kendine özgü bir kullanım amacı ve işlevi olabilir. Özellikle büyük ölçekli projelerde, sınıflar arasında kalıtım ilişkisi kurularak, ortak özellikleri ve metodları paylaşan sınıflar oluşturmak mümkündür.
Sınıf Yapıları
Sınıf yapısı, nesnelerin özelliklerini ve metodlarını belirleyen temel prensipleri içerir. Sınıf yapısı oluştururken öncelikle sınıf adı verilmelidir. Ardından sınıf içinde kullanılacak özellikler (properties) ve metodlar (methods) tanımlanmalıdır.
Sınıf içinde belirtilen özellikler, nesnenin yapısını ve veri tipini belirler. Sınıf içinde tanımlanan metodlar ise nesnenin davranışlarını belirler. Metodlar, nesnenin yapısına göre farklı işlemler yapabilir ve veri döndürebilirler.
- Sınıf yapısı oluşturma işlemi için "class" anahtar kelimesi kullanılır.
- Özellikler, "public", "private" ve "protected" anahtar kelimeleriyle tanımlanabilirler.
- Metodlar, fonksiyonlar gibi oluşturulur ancak sınıf içerisinde tanımlanır.
Sınıf yapısı içindeki özelliklerin ve metodların erişim durumunu denetlemek amacıyla "encapsulation" kullanılır. "Encapsulation", özellik ve metodların erişim seviyelerini belirleyerek, istenilen şekilde erişim sağlanmasını sağlar. Bu sayede, sınıf dışından yapılan müdahalelerin önüne geçilebilir ve nesnenin yapısının korunması sağlanabilir.
Sınıf yapısı içinde kullanılan özelliklerin ve metodların erişim düzeyleri aşağıdaki şekilde belirlenir:
Encapsulation Türü | Tanım |
---|---|
public | Sınıfın dışından da erişilebilir. Nesne dışında kullanılabilir. |
private | Sadece sınıf içinde erişilebilir, dışarıdan erişim engellidir. |
protected | Sınıf içindeki diğer metodlar ve kalıtım yoluyla oluşturulan alt sınıflar tarafından erişilebilir. |
Sınıf yapısı, OOP prensipleri içinde en önemli yapılarından biridir ve PHP'de oldukça sık kullanılır. Sınıf yapısı ile oluşturulan nesneler, PHP'nin zengin kütüphaneleri ve OOP özellikleri ile daha da güçlendirilebilir.
Özellikler (Properties) ve Metodlar (Methods)
Programlama dillerinde sınıflar, nesneleri oluşturmak için kullanılır ve sınıf içinde tanımlanan özellikler ve metodlar nesnelerin özelliklerini belirler. Sınıf yapısı oluşturmanın temel prensiplerinden biri de özellikleri (Properties) ve metodları (Methods) belirlemektir.
Özellikler, sınıf içinde tanımlanan değişkenlerdir ve nesnelerin özelliklerini belirler. Bu değişkenlerin ne tür veri tipleri olduğunu belirleyerek, nesnelerin belirli bir formatta ve yapıda olmasını sağlayabiliriz. Örneğin, bir araba sınıfında özellikler olarak arabanın rengi, markası, modeli ve motor gücü gibi bilgileri belirleyebiliriz.
Metodlar ise sınıf içinde tanımlanan fonksiyonlardır. Nesneler üzerinde çalıştırılacak olan işlemleri belirler ve nesnenin nasıl davranacağını tanımlar. Metodların parametreleri olabilir ve geriye döndürdükleri değerler olabilir. Örneğin, bir araba sınıfında bir 'hızlan' metodu belirleyebiliriz ve metodun parametre olarak hız değerini almasını sağlayabiliriz. Bu metot, arabanın hızını arttıracaktır.
Sınıf içinde belirlediğimiz özelliklere ve metodlara erişebilmek için, nesneler oluştururuz. Bu nesneler, belirlediğimiz sınıf yapılarından türetilir ve özellikleri ve metodları kullanabilirler. Örneğin, bir araba sınıfından türetilen bir nesne, 'hızlan' metodu ile arabanın hızını arttırabilir ve 'dur' metodu ile aracı durdurabilir.
Get ve Set Metodları
Get ve set metodları, sınıf içinde tanımlanan özelliklere (properties) erişim sağlamak için kullanılan önemli araçlardan biridir. Get metodları, sınıf özelliğinin değerini döndürmeye yararken, set metodları ise sınıf özelliğinin değerini değiştirmeye olanak verir.
Bu metodlar, sınıfın dışından erişilen özelliklerin erişimini sınırlamak veya denetlemek için de kullanılabilir. Örneğin, bir özelliğe sadece okuma yetkisi vermek istiyorsanız, bu özelliğin sadece bir get metoduna sahip olması yeterlidir. Aynı şekilde, özelliklerin set metodlarının olmaması durumunda, sınıf dışında bu özelliklerin değerlerinin değiştirilmesi engellenmiş olacaktır.
Get metodları, sınıf özelliklerinin değerlerine erişmek için kullanılır. Bu özelliğin değerini değiştirmeden sadece okunmasını sağlarlar ve sınıfın dışından bu özelliğe erişilmesi durumunda, sadece özelliğin değeri döndürülür. Aşağıdaki örnek, get metodunun nasıl çalıştığını açıklar:
Kod | Açıklama |
---|---|
class Araba { private $marka; public function getMarka() { return $this->marka; } public function setMarka($marka) { $this->marka = $marka; } } $araba = new Araba(); $araba->setMarka("Mercedes"); echo $araba->getMarka(); // Yukarıdaki kodda, Araba sınıfında tanımlanan getMarka() metodunun kullanımı gösterilmektedir. Sınıfın dışından marka özelliğine erişim engellenmiştir. Sadece getMarka() metodunu kullanarak marka bilgisine erişim sağlanmıştır. | Bu kodda, Araba sınıfında tanımlanan getMarka() metodunun kullanımı gösterilmektedir. Sınıfın dışından marka özelliğine erişim engellenmiştir. Sadece getMarka() metodunu kullanarak marka bilgisine erişim sağlanmıştır. |
Set metodları ise sınıf özelliklerinin değerlerini değiştirmek için kullanılır. Bu metodlar, özelliklere sınıfın dışından değer atanmasına olanak sağlar. Aşağıdaki örnek, set metodunun nasıl kullanıldığını açıklar:
Kod | Açıklama |
---|---|
class Araba { private $marka; public function getMarka() { return $this->marka; } public function setMarka($marka) { $this->marka = $marka; } } $araba = new Araba(); $araba->setMarka("Mercedes"); echo $araba->getMarka(); // Bu kodda da setMarka() metodunun kullanımı örneklendirilmektedir. Sınıfın dışından marka özelliğine erişim engellenmiştir. setMarka() metodunu kullanarak yeni bir marka bilgisi atanmıştır. | Bu kodda da setMarka() metodunun kullanımı örneklendirilmektedir. Sınıfın dışından marka özelliğine erişim engellenmiştir. setMarka() metodunu kullanarak yeni bir marka bilgisi atanmıştır. |
Kalıtım (Inheritance) İlişkisi
Sınıf yapısı oluştururken kalıtım ilişkisinden yararlanmak, kod tekrarını önlemek ve programlama sürecinde zaman kazandırmak açısından oldukça avantajlıdır. Kalıtım, bir sınıfın özelliklerinin başka bir sınıfa aktarılmasını sağlayan bir yapıdır. Bu sayede benzer yapılardaki sınıfların kodlarının tekrarlanmasını önlemek mümkün hale gelir.
Kalıtım yapısı oluştururken, yeni bir sınıfı başka bir sınıftan türetmek gereklidir. Türetilen sınıf, ebeveyn sınıfın özelliklerini ve fonksiyonlarını içerecektir. Bu sayede yeni sınıf, ebeveyn sınıfın özelliklerini ve fonksiyonlarını da barındırabilecektir. Böylece, aynı tip nesneler için benzerlikler taşıyan özellikler yeniden yazılmak zorunda kalmayacak ve kod tekrarından kaçınılacak.
Bu yapıyla ayrıca, programlama sürecinde zaman kazanmanız mümkündür. Kalıtım prensibinin kullanımı, sınıf içindeki kodların genişletilmesi ya da değiştirilmesi gerektiği zaman oldukça pratik bir çözüm sunar. Yani, eğer bir sınıfın özelliklerini başka bir sınıf içinde kullanmak istersek, türetilen sınıfı çağırmak yeterli olacaktır. Bu sayede, tekrarlanan işlemlerden kurtulabilir ve yazılım geliştirme sürecinde daha hızlı ilerleyebilirsiniz.
Soyut Sınıflar (Abstract Classes) ve Arayüzler (Interfaces)
Soyut sınıflar ve arayüzler, OOP prensiplerinde sıkça kullanılan yapılar arasındadır. Soyut sınıflar, diğer sınıfların temel yapılarını belirleyen, ancak kendilerine ait örnekleri olmayan, yalnızca kalıtım veya polimorfizm için kullanılan sınıflardır. Arayüzler ise, sınıfların belirli bir davranış veya işlevselliği yerine getirebilmesi için gerekli olan metotları içeren yapılardır.
Soyut sınıflar ve arayüzler, sınıf yapısının daha dinamik hale getirilmesine ve farklı sınıfların farklı amaçlar için kullanılabilmesine olanak tanırlar. Özellikle projelerde birden fazla sınıfın beraber kullanılması gerektiğinde, arayüzler sayesinde bu sınıfların benzer özelliklerinin bir arada toplanması sağlanabilir. Bu sayede, proje yönetimi ve bakımı daha kolay hale gelir.
Soyut Sınıflar | Arayüzler |
---|---|
Sınıfların temel yapılarını belirleyen, ancak kendisine ait örnekleri olmayan sınıflar | Sınıfların belirli bir davranış veya işlevselliği yerine getirebilmesi için gerekli olan metotları içeren yapılardır |
Kalıtım ve polimorfizm için kullanılırlar | Kalıtım veya implementasyon (uygulama) yoluyla kullanılırlar |
Örneklenemezler | Örneklenemezler veya çoklu arayüz implementasyonu yapılabilir |
İçerisinde soyut metotlar bulunabilir | İçerisinde tamamı soyut olan metotlardan oluşur |
Soyut sınıflar ve arayüzlerin kullanımı, sınıf yapısının daha modüler ve anlaşılır hale gelmesini sağlar. Projelerin geliştirilmesi sırasında, bu yapıların doğru bir şekilde kullanılması sayesinde, kod tekrarının önüne geçilebilir ve daha hızlı geliştirme süreçleri elde edilebilir.
Nesne Yapıları
Nesne yapısı, sınıf yapısında tanımlandıktan sonra kullanılabilen bir örnektir. Nesne yapısı oluşturmanın temel prensibi, sınıf yapısında tanımlanan özellik ve metodları kullanmak ve bu özelliklere özgü değerler ile metodlara özel işlemler yapmaktır.
Örneğin, bir araba sınıfı oluşturduğumuzu ve bu sınıf içinde marka, model, renk gibi özellikleri (properties) ve hızlan, yavaşla gibi hareketleri (methods) tanımladığımızı düşünelim. Nesne yapısı oluştururken, bu özelliklere araba markası, modeli, rengi ve hızı gibi değerler atayabilir ve metotları kullanarak arabayı hızlandırabilir veya durdurabiliriz.
Nesne yapısı, sınıf yapısının örneklerini oluşturduğu için sınıf yapısında kullanılan prensipler nesne yapısında da geçerlidir. Nesne yapısı oluştururken dikkat edilmesi gereken en önemli nokta, sınıf yapısında tanımlanan özelliklerin ve metodların kullanımıdır.
Nesne yapısı kullanırken, sınıf yapısında tanımlanan özellikler ve metodlar kullanılarak belirli bir amaca yönelik işlemler yapılabilir. Örneğin, bir blog yazısı sınıfı oluşturulduğunu varsayalım. Bu sınıf içinde tanımlanan özelliklere yazı başlığı, yazar adı, yayınlanma tarihi, gibi bilgiler atanabilir ve metotlar ile yazı içeriği düzenlenebilir veya silinebilir.
Nesne yapısı oluştururken temel prensip, sınıf yapısında tanımlanan özellikleri özelleştirmek ve bu özelliklere özel işlemler yapmaktır. Bu sayede, sınıf yapısında oluşturulan genel bir yapı nesne yapısı ile belirli bir amaca yönelik olarak kullanılabilir. Nesne yapısı örnekleri, sınıf yapısının kullanım anlamında uygulanmasını sağlar.
Klonlama (Cloning)
PHP'de nesne klonlama işlemi, mevcut bir nesneden yeni bir nesne oluşturmak için kullanılan bir tekniktir. Bu işlemi gerçekleştirmek için, __clone() adında özel bir metot kullanılır.
Klonlama yöntemi, orijinal nesnenin bir kopyasını oluşturur ve kopyanın tüm özelliklerini ve metodlarını içerir. Orijinal nesne ile kopya nesne arasında tamamen ayrılmış iki farklı nesne oluşur.
Klonlama işlemi, özellikle büyük ve karmaşık nesnelerin yeniden kullanımını sağlar ve zaman kazandırır. Nesne kopyalamak için __clone() metodu kullanılır ve sınıfta __clone() metodu tanımlanmamışsa, varsayılan olarak tüm özelliklerin bir kopyası oluşturulur.
Bir örneklem nesnesinde, orijinal nesneden kopya oluşturmak için clone anahtar kelimesi ve __clone() metodu kullanılır. Aşağıdaki örnekte, Book sınıfından alınan bir nesnenin kopyası oluşturulmuştur:
class Book { public $title; function __construct($title) { $this->title = $title; } function getTitle() { return $this->title; } function setTitle($title) { $this->title = $title; } function __clone() { $this->title = "A copy of " . $this->title; } } $book1 = new Book("Book Title"); $book2 = clone $book1;
Bu örnekte, $book2 nesnesi, __clone() metodu tarafından oluşturulan bir kopyada değiştirilen $title özelliğinin kopyasıdır. Yeni özelliği değiştirmek için mevcut nesne kopyasını kullanarak rahatça çalışabilirsiniz.
Sınıf Ve Nesne Serileştirme (Serialization)
Sınıf ve Nesne Serileştirme, nesnelerin verilerini sıkıştırarak saklama işlemidir. Bu yöntem, verilerin farklı kaynaklara aktarılması ya da depolanması gerektiğinde oldukça yararlıdır. PHP’de yerleşik olarak bulunur ve kullanımı oldukça kolaydır.
Bir nesneyi serileştirmek için, öncelikle o nesnenin serialize() fonksiyonu kullanılarak seri hale getirilmesi gerekmektedir. Bu seri hale getirilmiş veri, daha sonra değişkenlere atanarak farklı kaynaklarda kullanılabilir hale gelir. Serileştirme işlemi tamamlanmış bir nesne, unserialize() fonksiyonu yardımıyla eski haline geri dönüştürülebilir.
Serileştirme işlemi, özellikle objelerin ağ üzerinde aktarılması ya da tarayıcıda cookie olarak saklanması gerektiği durumlarda oldukça kullanışlıdır. Bunun yanı sıra, otomatik yedekleme işlemlerinde, verilerin farklı biçimlerde saklanması gerektiğinde ve veritabanından veri çekme süreçleri sırasında kullanılan bir yöntemdir. Yani serileştirme, PHP’nin OOP yapısının güçlü bir özelliği olarak ön plana çıkmaktadır.
Bu işlem sırasında, nesnelerin sadece public alanları ve diğer public nesneler serileştirilir. Bu sebeple, güvenlik açısından önemli verilerin serileştirilmesi önerilmez. Bu tür durumlarda, __sleep() ve __wakeup() fonksiyonları kullanılarak serileştirme işlemi özelleştirilebilir.
Genel olarak, sınıf ve nesne serileştirme işlemi, PHP’nin OOP yapısının önemli bir özelliğidir. Verilerin saklanması, aktarılması ve kullanımı sürecinde oldukça kullanışlı olan bu yöntem, özellikle farklı kaynaklar ve veritabanları kullanımı sürecinde yararlıdır. Serileştirme işleminin yapısı ve kullanımı oldukça kolaydır ve her PHP geliştiricisinin bilmesi gereken bir kavramdır.
Kapsülleme ve Erişim Seviyeleri (Encapsulation & Access Modifiers)
OOP prensipleri ile sınıf oluşturma, nesne yapısı kurma ve veri hizmetleri sunma konusunda en önemli konu kapsülleme ve erişim seviyeleridir. Sınıfların özellikleri ve metodlarına erişim, özellikle büyük projelerde birçok farklı sınıfın iç içe geçmesiyle karmaşık hale gelebilir. Bu durumda özelliklerin ve metodların diğer sınıflar tarafından yanlış kullanımı önemli hatalara sebep olabilir.
Kapsülleme, nesnelerin içindeki değişkenlerin ve fonksiyonların tamamının dışarıya açılmamasını sağlayan bir tekniktir. Bu sayede, sınıf içindeki değişkenlere sadece belirli metotlar aracılığı ile erişilebilir. Dolayısıyla, programlama sürecinde oluşabilecek birçok sorun önlenebilir ve kodun açıklığı artırılabilir.
Erişim seviyeleri, nesnenin içindeki özelliklere ve metotlara sınırlı şekilde erişilmesini sağlar. Bu teknikle sınıfın içindeki tüm özellikler ve metotlar bir erişim kontrolörü ile birlikte tanımlanır. Erişim seviyeleri ayrıca, sınıfın dışındaki kodlar ve diğer sınıflar için belirlenebilir. Bu seviyeler, "public", "protected" ve "private" olmak üzere üçe ayrılır.
"Public" erişim seviyesi, özelliğin veya metodun sınıf içindeki tüm kod blokları tarafından kullanılabilmesini sağlar. "Protected" erişim seviyesi, sadece sınıfın kendi yapısı ve alt sınıfları tarafından kullanılabilir. "Private" erişim seviyesi ise, sadece ana sınıf içinde kullanılabilir ve alt sınıflar içinde erişilemez.
Bununla birlikte, erişim seviyeleri, kodun okunabilirliğini arttırarak geliştiricinin koda erişimini sınırlamaz, sadece kullanım alanını belirler.
- Kapsülleme ve erişim seviyelerinin belirlenmesi, kodun okunabilirliğini ve ölçülebilirliğini arttırır.
- Programlama sürecinde oluşabilecek hatalar, özellikleri ve methodları koruyan kapsülleme ile önlenebilir.
- Erişim seviyeleri, kodun güvenliğini ve sağlıklı çalışmasını destekler.