Sınıflar & Nesneler


    × Bunları biliyor muydunuz?
"ZN Framework 2011 senesinden beri geliştirilmeye devam etmektedir."


Sınıflar ve Nesneler, OOP'nin varlık nedenir. Yani ortada bir Nesne Yönelimli Programlama varsa orada sınıflar ve nesneler var demektir. Bir önceki konumuzda kodların kümelenmesi gerektiğinden bahsetmiştik. İşte tam olarak o kümele işleminin yapılacağı yer burasıdır. Sınıflar kümeleme işlemi için kullanacağımız yapılardır.   Nesne kavramı ise bir sınıf içerisinde yer alan nitelik, yöntem ve sınıf sabitlerini kapsayan bir kavramdır. "Temel PHP Eğitimi" konulu anlatımlarımızda değişkenlerin, dizilerin ve fonksiyonların belli bir söz dizimi ile tanımlandığını göstermiştik. Aynı şekilde Sınıfların da oluşturulabilmesi için belli bir söz dizimi gerektirir.

 

 

# Söz Dizimi


Bir sınıf oluşturmak için en basit hali ile söz dizimi aşağıdaki gibidir.

class ExampleClassName
{
    # kodlar
}

Yukarıdaki sınıfımız şimdilik kendisine ait nesneleri içermemektedir.

Sınıf İsimlendirme Kuralları

Sınıf ismi seçerken dikkat edilmesi gereken bazı kurallar vardır;

Sınıf ismi bir harf veya alt çizgi (_) ile başlayabilir.
Sınıf ismi yalnızca harf, sayı veya alt çizgi içerebilir.
PHP tarafından rezerve edilmiş anahtar kelimeler kullanılamaz. Örnek: foreach

 

 

# Nitelikler


Nitelikler sınıfların içerisinde tanımlanan değişkenlerdir. Sınıf içerisinde kullanıldıklarından dolayı nitelik ismini almışlardır. Çünkü değişkenler sınıf içerisinde o sınıfın bir özelliği kabul edilir. Bunu bir insanın boyu, bir sınıfın mevcudu gibi düşünebilirsiniz. 

Söz Dizimi

Niteliklerin değişkenler gibi olduğunu söylemiştik. Ancak sınıf içerisinde tanımlanırken belli kurallara göre tanımlanırlar.

public | protected | private [static] $propertyName [= 'Property Value']; 

Yukarıda public, protected, private ve static deyimlerinin ne olduğuna daha sonra değinilecektir.

Nitelik İsimlendirme Kuralları

Nitelik ismi seçerken dikkat edilmesi gereken bazı kurallar vardır;

Nitelik ismi bir harf veya alt çizgi (_) ile başlayabilir.
Nitelik ismi yalnızca harf, sayı veya alt çizgi içerebilir.

Örnek
class Human
{
    public $height;
    public $weight;
    public $age;

    # Kodlarınız
}

 

 

# Yöntemler


Yöntemler sınıfların içerisinde tanımlanan fonksiyonlardır. Sınıf içerisinde kullanıldıklarından dolayı yöntem ismini almışlardır. Çünkü fonksiyonlar sınıf içerisinde o sınıfın bir yöntemi kabul edilir. Bunu bir insanın yaşam biçimi, bir sınıfın davranışı gibi düşünebilirsiniz. Yöntemler zaman zaman niteliklerin değerlerine ulaşmak ve üzerinde değişiklik yapmak için de kullanılırlar.

Söz Dizimi

Yöntemlerin fonksiyonlar gibi olduğunu söylemiştik. Ancak sınıf içerisinde tanımlanılırken belli kurallara göre tanımlanırlar.

public | protected | private [static] function functionName($p1, $p2 ... $pN){ # kodlar

Yöntem İsimlendirme Kuralları

Yöntem ismi seçerken dikkat edilmesi gereken bazı kurallar vardır;

Yöntem ismi bir harf veya alt çizgi (_) ile başlayabilir.
Yöntem ismi yalnızca harf, sayı veya alt çizgi içerebilir.

İstisna olarak yöntem isimleri PHP'nin rezerve edilmiş anahtar kelimelerinden seçilebilir. Çünkü o yöntem bir sınıfa ait olduğundan PHP'nin kendi fonksiyonu ile çakışmayacaktır. 

Örnek
<?php

class Human
{
    public $height;
    public $weight;
    public $age;

    public function lifeStyle()
    {
        return 'A stagnant life!';
    }
}

 

 

# Sınıf Sabitleri


Sınıf sabitleri const deyimi ile tanımlanır. Sınıf sabitlerine kapsam erişim operatörü olan :: (iki nokta) ile erişilir.

Söz Dizimi

const CONSTANT_NAME = 'value';

Sabit İsimlendirme Kuralları

Sabit ismi seçerken dikkat edilmesi gereken bazı kurallar vardır;

Nitelik tanımlama kuralları aynen geçerlidir.

Sabitlerin Alabileceği Veri Türleri 

Ölçeklenebilir değerler. (string|numeric|bool
Diziler. (array)

Sabitleri Kullanın
Dosya: Human.php
<?php 

class Human
{
    const VERSION = '1.0.0';
    const ABOUT   = ['author' => 'ZN', 'date' => '20180404'];

    public $height;   
    public $weight;   
    public $age;     

    public function lifeStyle() 
    {   
        return 'A stagnant life!';   
    }
}
Dosya: index.php
<?php require 'Human.php';

echo Human::VERSION;
1.0.0

 

 

# Nasıl Kullanılır?


Oluşturulan sınıfları kullanmak için new deyimi kullanılır. Sınıf kullanım söz dizimi aşağıdaki gibidir.

Söz Dizimi

Bir sınıfın kural olarak aşağıdaki gibi kullanabilirsiniz.

$instanceName = new ExampleClassName[([$p1, $p2 ... $pN])];

Sınıf Oluşturun

Şimdi örnek olarak Human sınıfı oluşturalım.

Dosya: Human.php
<?php 

class Human
{
    const VERSION = '1.0.0';
    const ABOUT   = ['author' => 'ZN', 'date' => '20180404'];

    public $height;   
    public $weight;   
    public $age;     

    public function lifeStyle() 
    {   
        return 'A stagnant life!';   
    }
}
Sınıfı Dahil Edin

Şimdi oluşturduğumu Human sınıfımızı aşağıdaki dosyaya dahil edelim.

Dosya: index.php
<?php require 'Human.php';

Bir dosyayı başka bir dosya dahil etmek için require veya include deyimi kullanılır.

Sınıfı Kullanın

Şimdi de söz dizimi kuralına göre dahil ettiğimiz sınıfı kullanalım.

<?php require 'Human.php';

$human = new Human;

Yukarıdaki kullanımda $human değişkeni Human sınıfının bir örneği olup Human sınıfının public erişimli tüm nitelik ve yöntemlerini kullanabilir.

Nitelikleri Kullanın

Bir sınıfın public erişimli niteliklerine kapsam çözümleme operatörlerinden -> operatörü ile erişilir.

<?php require 'Human.php';

$human = new Human;

$human->height = 180;
$human->weight = 75;
$human->age    = 30;

echo 'Height:' . $human->height . '<br>';
echo 'Weight:' . $human->weight . '<br>';
100
75
Yöntemleri Kullanın

Bir sınıfın public erişimli yöntemlerine kapsam çözümleme operatörlerinden -> operatörü ile erişilir.

<?php require 'Human.php';

$human = new Human;

echo $human->lifeStyle();
A stagnant life!
Sabit Kullanın

Bir sınıfın sabitlerine kapsam çözümleme operatörlerinden :: operatörü ile erişilir.

<?php require 'Human.php';

echo Human::VERSION;

Sınıfın örneği türetilmişse;

$human = new Human;

echo $human::VERSION; 

şeklinde de erişim sağlanabilir.

1.0.0