Bu makale, PHP OOP'ta özellik ve metodların nasıl tanımlanacağını anlatıyor Sınıf yapısına ve obje yönelimli programlamaya aşina olanlar için ideal Okuyun ve kodlama becerilerinizi geliştirin!
PHP, nesne yönelimli programlama (OOP) dilinin en popüler örneklerinden biridir. OOP, programların daha modüler ve daha sürdürülebilir hale gelmesine yardımcı olan bir programlama metodudur. PHP'de sınıfların tanımlanması ve kullanımı, özellikle de özellik ve metotların tanımlanması, bu programlama anlayışının temelini oluşturur.
Bu makale, PHP OOP'ta özellik ve metot tanımlamak için yapılması gerekenleri açıklayacaktır. Özellik tanımlamak sınıf içinde değişkenleri tanımlamaya benzerken, metotlar sınıf içinde yöntemleri tanımlamanıza olanak sağlar. Ayrıca, constructor veya destructor metotlarını kullanarak nesneyle ilgili işlemler gerçekleştirebilirsiniz. Bunlar, OOP programlaması için önemli ve gereklidir.
Özellik Tanımlama
PHP'de sınıf içerisinde özellik tanımlamak için 'public', 'private' veya 'protected' gibi erişim belirleyicileri kullanılır. Bu belirleyiciler, özelliklerin sınıf dışındaki erişimini sınırlandırır. 'public' yazılan özelliklere sınıf dışından da erişim sağlanabilirken, 'private' ve 'protected' erişim belirleyicileri ile tanımlanan özelliklere sadece sınıf içinde erişim sağlanabilir.
Sınıf içinde özellik tanımlamak için aşağıdaki şekilde örnek bir kod parçası kullanılabilir:
Özellik Tanımlama |
---|
<?php class Araba { public $marka; private $model; protected $yil; } ?> |
Yukarıda verilen örnek kod parçasında 'Araba' sınıfı içinde 'public', 'private' ve 'protected' erişim belirleyicileri ile 'marka', 'model' ve 'yil' özellikleri tanımlanmıştır. Bu şekilde, sınıfın içinde kullanacağımız özellikleri kolayca tanımlayabiliriz.
Metot Tanımlama
Bir sınıf içinde yeni bir metod tanımlamak için function kelimesi kullanılır. Bu yeni metod, class anahtar kelimesine yazılan fonksiyonlar gibi yazılır.
Bir metod tanımlamak istediğinizde, öncelikle kullanmak istediğiniz sınıfı instantiate etmeniz gerekecek. Sonra function kelimesine yazdığınız metod adı ve opening and closing parentheses içine isteğe bağlı olarak parametre de ekleyebilirsiniz. Metod adının hemen ardından süslü parantezler { } kullanılır ve işlevin tüm kodu süslü parantezler arasında yer alır.
Metodlar gibi hatırlatıcı değişkenler de oluşturmak mümkündür. Ancak bu sefer, yapılandırıcının public function__construct() içine eklenmesi gerekiyor. İstasyon benzeri bir yapılandırıcının oluşturulması için yalnızca metod adının değiştirilmesi gerekiyor ve $this anahtar kelimesi, o sınıfın nesnelerine referans sağlamak için kullanılacak.
Bir diğer önemli husus, inheritance yani kalıtım mekanizmasıdır. Bir metod tanımlayıp, taşıdığınızda bu kalıtım özelliğini kullanabilirsiniz. Ancak, bu, istemcilerin bu metodları türetilen nesnelere bağımlılığının bir örneğidir. Yeni bir metod tanımlandığında, 'protected' veya 'private' olarak işaretlenebilir. 'Protected' olarak işaretlenen bir metod, yalnızca o metodun tanımlandığı sınıftan veya alt sınıflardan erişilebilir durumda olurken, 'private' olarak işaretlenen bir metod, sadece o metodun tanımlandığı sınıftan erişilebilir durumda olur.
Metodların yanı sıra, interfaceler de kullanılabilir. Bir interface, bir sınıfın hangi metodları tanımlaması gerektiğini bildirir. Bir sınıf, bu metodları uygularken, istemci sınıfların bu sınıfın bir örneğine kolayca erişebilmesini sağlayacak.
Çoğu zaman, bir metodun, bir sınıfın yapısında uygun bir şekilde yer almaması veya geçerli verilere dayalı olarak normal işleyiş tarafından görmezden gelinmesi durumunda hata mesajları vermesi amaçlanır. Bu fevkalade değerli bir hata ayıklama kaynağıdır, çünkü bu hata mesajları, kodun belirli bir alanının neden hatalı olduğunu belirtmek için kullanılabilir.
Constructor Kullanımı
Sınıf içinde özellikleri tanımladıktan sonra, bu özelliklere ilk değer atamasını yapmak için constructor metodu kullanılır. Constructor metodu, sınıf oluşturulduğunda otomatik olarak çalışır ve özelliklere değer atar. Böylece nesnenin kullanımı daha da kolaylaşır.
Bir constructor metodunun tanımlanması, sınıf adının __construct() olarak belirtilmesi ve içine özelliklerin atanacağı kod satırlarının yazılmasıyla yapılır. __construct() metodu için herhangi bir geri dönüş değeri tanımlanmaz.
Aşağıdaki örnek, constructor metodu kullanılarak "Person" adında bir sınıf oluşturuyor. Sınıfın özellikleri olan $name, $age ve $gender, constructor metodu içinde belirtiliyor ve değerleri atanıyor.
class Person { public $name; public $age; public $gender; function __construct($name, $age, $gender) { $this->name = $name; $this->age = $age; $this->gender = $gender; }}
Yukarıdaki örnekte sınıf oluşturulduktan sonra, $name, $age ve $gender özelliklerine atanan değerler otomatik olarak constructor metodunda belirtiliyor. Örneğin,
$person1 = new Person("Ahmet", 25, "Erkek");
Bu şekilde, $person1 nesnesi yaratılmış olur ve $name özelliği "Ahmet", $age özelliği 25 ve $gender özelliği "Erkek" olarak tanımlanır.
Constructor metodunun özellikle parametreli olarak tanımlanması daha da kullanışlıdır. Böylece her bir nesne yaratıldığında farklı değerler atanabilir.
Sonuç olarak, sınıf oluştururken constructor metodu kullanmak sınıfın verimli bir şekilde kullanılabilmesini sağlar. Bu sayede özelliklere ilk değerleri atamak daha da kolaylaşır ve kullanıcılara zaman kazandırır.
Parametreli Constructor Kullanımı
Parametreli constructor metodu bir sınıfın daha esnek ve özelleştirilmiş kullanımına izin verir. Bu metod, sınıf nesnesi oluşturulurken başlangıçta değerlerine atanan özellikleri kullanarak sınıfın özelliklerini ayarlamamızı sağlar.
Örneğin, bir otomobil sınıfı oluşturuyoruz ve otomobilimizin yapısında yer alacak özellikleri belirliyoruz: renk, vites tipi, model yılı vb. Ancak farklı müşteri ihtiyaçlarına göre, bazı müşterilerimiz otomobilimizi satın alırken vites tipinin manuel veya otomatik olduğunu sınıfın constructor metodu içerisine yazarak belirtmek isteyebilir. Bu durumda, parametreli constructor özelliği devreye girer.
Aşağıdaki tablodaki örnekte parametreli constructor metodu ile otomobil sınıfının vites tipi özelliği belirtilmiştir:
Otomobil Sınıfı Parametreli Constructor Metodu |
---|
class araba { public $renk = "Beyaz"; public $vites = "Manuel"; public $model_sen = "2022"; public function __construct($vites_tip){ $this->vites = $vites_tip; } } $araba1 = new araba("Otomatik"); |
Yukarıdaki örnekte, constructor fonksiyonu parametre olarak $vites_tip alıyor. Ve parametreli constructor metodu çağrıldığında, otomobil sınıfının vites tipi özelliği $vites_tip olarak ayarlanır. Ardından, yeni bir araba1 nesnesi oluşturulur ve otomatik vites tipiyle ayarlanır. En sonunda, $araba1->vites ifadesi kullanılarak otomobilin vites tipi yazdırılır.
Parametreli constructor metodu, bir sınıf nesnesi oluşturulurken özelliklerin daha kolay bir şekilde ve özelleştirilmiş olmasını sağlar. Bu metodun kullanımı sadece vites tipi örneğiyle sınırlı kalmamakla birlikte, farklı özellikler için de uygun örnekler verilebilir.
Constructor Metodu İçindeki Özelliklerin Tanımlanması
Constructor metodu, sınıf örneği oluşturulduğunda otomatik olarak çağrılır ve sınıfın özelliklerine başlangıç değerleri atanabilir. Ancak, özellik değerleri her zaman constructor metodunun parametreleriyle gelmeyebilir ve sınıfın özelliklerinin başka bir yerden tanımlanması gerekebilir. Bu durumda, constructor metodu içinde de özellikler tanımlanabilir.
Özellik tanımlama işlemi, $this anahtar kelimesi kullanılarak yapılır. Örnek olarak:
public function __construct() { $this->ogrenciNo = ""; $this->ad = ""; $this->soyad = ""; $this->yas = "";}
Bu örnek, sınıfın constructor metodunda "ogrenciNo", "ad", "soyad" ve "yas" özelliklerinin tanımlandığını göstermektedir. Bu özelliklere sınıfın diğer metotlarından erişebilirsiniz.
Buna ek olarak, özellikler constructor metodunun parametreleriyle de tanımlanabilir. Örnek olarak:
public function __construct($no, $adi, $soyadi, $yasi) { $this->ogrenciNo = $no; $this->ad = $adi; $this->soyad = $soyadi; $this->yas = $yasi;}
Bu örnek, constructor metoduna parametre olarak "no", "adi", "soyadi" ve "yasi" değişkenlerinin geldiğini göstermektedir. Bu değişkenler, özelliklere atanarak sınıfın diğer metotlarından erişilebilir hale gelir.
Sınıfın constructor metodunda özellik tanımlama işlemi yaparken, özelliklerin erişim düzeyini de belirleyebilirsiniz. Erişim düzeyleri hakkında daha fazla bilgi için "Erişim Düzeyleri" makalesine bakabilirsiniz.
Destructor Kullanımı
PHP OOP'ta sınıfları tanımlarken, sınıfın yapısını ve işleyiş şeklini şekillendiren özellikler ve metotlar tanımlanmalıdır. Destructor metodu da bu özelliklerden biridir.
Destructor metodu, sınıfın örneklerinden biri imha edildiğinde ya da sınıfın kullanımı sonlandırıldığında otomatik olarak çağrılır. Bu metodun kullanımı, sınıfın gereksiz bellek kullanımını önleyerek performansı artırır.
Bir sınıfta destructor metodu tanımlamak için '__destruct()' komutu kullanılır. Örneğin;
class Araba { // constructor metod ve özellikleri buraya yazılır . . . // destructor metod public function __destruct(){ echo "Araba nesnesi imha edildi."; }}
Yukarıdaki örnekte, Araba sınıfının destructor metodu '__destruct()' olarak tanımlanmıştır. Bu metotun görevi, Araba sınıfından bir nesne imha edildiğinde ekrana 'Araba nesnesi imha edildi.' yazısının yazdırılmasıdır.
Destructor metodu, sınıfların yapısına ve özelliklerine sağladığı faydalar nedeniyle önemlidir. Unutmayın, PHP OOP'ında sınıfların yapısı ve özellikleri doğru şekilde tanımlanması, kodun okunabilirliğini ve yazılımın performansını artıracaktır.
__get ve __set Kullanımı
PHP OOP'ta özellik ve metot tanımlamanın yanı sıra __get ve __set metodlarının kullanımı oldukça önemlidir. __get ve __set metodları, bir sınıfın özelliklerine erişim ve değişiklik yapma işlemlerinde kullanılır.
Özellikle __get metodu, sınıfın özelliklerine erişmek için kullanılır ve bir özelliğe erişim sırasında farklı koşullar belirleyebiliriz. Örneğin, bir özelliğe sadece okuma işlemi yapılmasını isteyebiliriz ve bunu __get metodunu kullanarak sağlayabiliriz.
__set metodunun kullanımı ise bir sınıfın özelliklerinin değiştirilmesini sağlayan, yani bir özelliğin içeriğinin değiştirilmesine olanak tanıyan bir yöntemdir. Eğer bir özellik sadece okunabilir ise __set metodunu kullanarak bu özelliğin değiştirilmesini engelleyebiliriz.
Özetle, __get ve __set metodları, sınıfın özelliklerine özelleştirilmiş bir erişim imkanı sağlar. Bu sayede sınıfın güvenliği arttırılabilir ve özelliklerin görünürlüğü kontrol edilebilir.
__get Kullanımı
__get metodu, sınıf içinde özel bir özellik çağrıldığı zaman devreye girer. Bu metot, obje özelliklerine erişme izni verir ve bu durum özelliklerin hem erişimini hem de değiştirilmesini mümkün kılar. Bir örnekle açıklayacak olursak, bir sınıf içinde yer alan özelliklere sınıf dışından erişmek istediğimiz bir durumda, __get metodunu kullanarak çalışmamızı tamamlayabiliriz.
__get metodunu kullanırken, objenin erişmek istediğimiz özelliği, önceden tanımlanmamışsa veya koruma altındaysa bu metot devreye girer ve özelliğe erişim izni verir. Bu nedenle, __get metodunu kullanmak, sınıf içinde yer alan koruma altında olan özelliklere erişmek için en uygun yöntemdir.
Metod Adı | Açıklama |
__get() | Objenin erişmek istediğimiz özelliğine erişim izni verir. |
__get metoduna parametre olarak, özelliğin isminin verilmesi gerekiyor. Bu sayede, belirli bir objenin erişmek istediğimiz özelliğine doğrudan erişebiliriz. Sınıf içinde tanımlı olan, özel veya koruma altındaki özelliklere erişmek istediğimiz zaman, __get metodunu kullanarak erişim sağlayabiliriz.
- __get metodunun kullanımı, özellikle koruma altındaki özelliklere erişim sırasında hata almalarını önler.
- Başka bir avantajı da, sınıf içinde yer alan özellikleri koruma altına alarak, sınıf dışından doğrudan erişimi engeller ve bunun yerine __get metodunu kullanarak erişimi sağlamasıdır.
__set Kullanımı
PHP OOP'ta, __set metodu, bir sınıfın özelliğine erişildiğinde veya atama işlemi gerçekleştiğinde otomatik olarak çalışan bir metottur. __set metodu, sınıflarda özelliklerin daha esnek hale getirilmesini sağlar. Bir sınıf özelliğine ilk kez erişim veya yeniden atama yapılırken çalıştığı için __set metoduna iki parametre verilir. Bunlar, erişilmeye çalışılan özelliğin adı ve atanmak istenen değerdir.
__set metodunun kullanımı için aşağıdaki örnek incelenebilir:
Kod | Açıklama |
---|---|
class Araba { private $model; public function __set($name, $value) { $this->model = $value; } public function getModel() { return "Araba modeli: " . $this->model; } } $araba = new Araba(); $araba->model = "Mercedes"; echo $araba->getModel(); | Bu örnekte, __set metodunda verilen değer, sınıfın private bir özelliği olan $model'e atanır. getModel metodu, $model özelliğinin değerini döndürür. |
Yukarıdaki örnekte, __set metodunda sınıfın özelliğine erişmek için $name parametresi kullanılmıyor. Bunun nedeni, parametresiz erişim özelliğinin olmamasıdır. Yani, bir sınıf özelliğine erişmek için kullanılan herhangi bir yöntem, erişilmeye çalışılan özelliğin ismini içeren bir parametre içermelidir. Bu nedenle, __set metodu için $name parametresi gereklidir.
Sınıflarda özelliklerin daha esnek hale getirilmesi için __set metodu kullanılabilir. Özelliğe erişmek veya atama yapmak istendiğinde, herhangi bir eylem gerçekleştirilmeden önce kontrol yapılabilir. Bu, özellik değerlerini doğrulamak veya özelliklere özel bir davranış eklemek için kullanışlı olabilir.