Sınıflar & Nesneler
"URL::base() ve URL::site() kullanımları farklıdır. Özellikle varlık dosyalarına yol verilirken URL::base(), [a] etiketi ile köprü oluştururken URL::site() kullanılmalıdır."
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 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.
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 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.
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.
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 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.
<?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.
const CONSTANT_NAME = 'value';
Sabit ismi seçerken dikkat edilmesi gereken bazı kurallar vardır;
● Nitelik tanımlama kuralları aynen geçerlidir.
● Ölçeklenebilir değerler. (string|numeric|bool)
● Diziler. (array)
<?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!';
}
}
<?php require 'Human.php';
echo Human::VERSION;
# 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.
Bir sınıfın kural olarak aşağıdaki gibi kullanabilirsiniz.
$instanceName = new ExampleClassName[([$p1, $p2 ... $pN])];
Şimdi örnek olarak Human sınıfı oluşturalım.
<?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!';
}
}
Şimdi oluşturduğumu Human sınıfımızı aşağıdaki dosyaya dahil edelim.
<?php require 'Human.php';
Bir dosyayı başka bir dosya dahil etmek için require veya include deyimi kullanılır.
Ş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.
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>';
75
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();
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.