Nesne Erişimi


    × Bunları biliyor muydunuz?
".htaccess dosyasının içeriğini yapılandırmak için Settings/Htaccess.php yapılandırma dosyası kullanılır."


Nesnelere sınıf içerisinden ve dışarısından statik ve statik olmayan erişim olmak üzere 2 erişim durumu söz konusudur. Statik olmayan nesnelere kapsam çözümleme operatörlerinden -> operatörü ile erişilirken statik nesnelere :: operatörü ile erişilir. Şuana kadar yaptığımız örnekler statik olmayan erişim üzerineydi. Birde nesnelere erişmek için statik erişim kullanılır. Statik erişim nitelik veya nesnelerinin görünüm deyimlerinden hemen sonra kullanılan static deyimi ile sınıfın bir örneğinin oluşturulmasına gerek kalmadan doğrudan doğruya sınıfın kendisinden erişilebilir olmasını sağlar. Bu nesnelere erişim için kapsam çözümleme operatörü olan :: operatörü kullanılır. Statik erişim gerektiren kullanımların daha doğrusu bir niteliğin veya yöntemin statik olarak erişilebilir hale getirilmesinin amacı genelde sınıf için değişmeyen bilgileri içeren verilere doğrudan erişim sağlamaktır. Genellikle tek görevli yöntemlerin tasarımı için oldukça uygundur. Statik yöntemlere erişim için sınıfın bir örneği oluşturulmadığından performans olarak çok daha hızlıdırlar. Özellikle bellek tüketimi çok fazla olan sistemlerde statik erişimli sınıf tanımlarını sık kullanılması gerekebilir. Yinede bir yöntemin statik olup olmayacağına kullanımına göre karar vermek en doğrusudur.

Nesne erişim deyimleri şöyledir;

$this-> Statik olmayan sınıfların nitelik ve yöntemlerine sınıf içerisinden erişmek için kullanılır.
self:: Statik sınıfların nitelik ve yöntemlerine sınıf içerisinden erişmek için kullanılır.
parent:: Üst sınıfın nitelik ve yöntemlerine sınıf içerisinden erişmek için kullanılır.

 

 

# Statik Olmayan Nitelik ve Yöntem

Statik olmayan nitelik ve yöntemlere erişmek için görünürlük genişliğine göre sınıf içinden veya dışından -> operatörü ile erişilir.

Dosya: Car.php
class Car
{
    public $version = '5.2.7';

    public getVersion()
    {
        return '5.2.7';
    }
}
Dosya: index.php
<?php require 'Car.php';

$car = new Car;

echo $car->version;
echo $car->getVersion();
5.2.7
5.2.7
Sınıf İçinde Kullanım

Sınıf içerisinde statik olmayan yöntemlere sınıf içerisinden görünürlük genişliğine göre $this-> ile erişim sağianır. $this bulunduğu sınıf temsil eden ve o sınıfa ait tanımlanan nitelik ve yöntemlere erişimi sağlayan özel bir ön tanımlı değişkendir. Statik olmayan yöntemlerin içerisinde kullanılabilir. Bir statik yöntem içerisinde $this kullanmayı denerseniz hata alırsınız.

Dosya: Car.php
class Car
{
    public $version = '5.2.7';

    public getVersion()
    {
        return $this->version;
    }
}
Dosya: index.php
<?php require 'Car.php';

$car = new Car;

$car->version = '5.3.0';

echo $car->getVersion();
5.3.0

 

 

# Statik Nitelik


Statik olarak tanımlanmış niteliklere :: operatörü ile erişilir. Ancak sınıftan new ile türetilmiş örnekten -> operatörü ile erişilemez.

Söz Dizimi

Static deyimi bir nitelik isminden hemen önce kullanılmalıdır. 

[public | protected | private] static $exampleProperty

Örnek 
Dosya: Car.php
class Car
{
    public static $version = '5.2.7';
}

Yukarıdaki Car sınıfımızda yer alan statik tanımlı niteliğe nasıl erişileceğini gösterelim.

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

echo Car::$version;

Car::$version = '5.2.8';

echo Car::$version;
5.2.7
5.2.8

Statik bir niteliğe aşağıdaki gibi erişmeye çalışırsanız uyarı seviyesinde bir hata alırsınız.

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

$car = new Car;

echo $car->version;
Notice: Accessing static property Car::$version as non static in C:\xampp\htdocs\test.php on line 3
Notice: Undefined property: Car::$version in C:\xampp\htdocs\test.php on line 3
Sınıf İçinde Kullanımı

Statik tanımlanmış bir niteliğe sınıf içerisinden $this ile erişilemez. Bunun yerine self:: deyimi ile erişim sağlanır. Şayet $this ile erişmeye çalışırsanız hata alırsınız.

Dosya: Car.php
class Car
{
    protected static $version = '5.2.7';

    public function getVersion()
    {
        return self::$version;
    }
}

 

 

# Statik Yöntem


Statik olarak tanımlanmış yöntemlere :: operatörü ile erişilir. Niteliklerin tam aksine sınıftan new ile türetilmiş örnekten -> operatörü ile de erişilebilir.

Söz Dizimi

Static deyimi bir nitelik isminden hemen önce kullanılmalıdır. 

[public | protected | private] static function exampleFunction(){}

Örnek 
Dosya: Car.php
class Car
{
    public static $version = '5.2.7';

    public static getCreateDate()
    {
        return '20180404';
    }
}

Yukarıdaki Car sınıfımızda yer alan statik tanımlı yönteme nasıl erişileceğini gösterelim.

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

echo Car::getCreateDate();
20180404

Statik bir yönteme new örneklemesi ile de erişilebilir.

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

$car = new Car;

echo $car->getCreateDate();
20180404
Sınıf İçinde Kullanımı

Statik tanımlanmış bir yönteme sınıf içerisinden self:: deyimi ile erişilir. Statik olarak tanlanmış bir yöntem içerisinde $this değişkeni kullanılamaz. Çünkü statik çağrımlarda sınıf örneği oluşturulmadığından $this de oluşturulamaz. Dolayısı ile statik yöntem içerisinde de kullanılamaz.

Dosya: Car.php
class Car
{
    private static $date = '20180404';

    public static getCreateDate()
    {
        return self::$date;
    }
}

Statik bir sınıf içerisinde $this kullanmayı denerseniz hata alırsınız.

class Car
{
    private static $date = '20180404';

    public static getCreateDate()
    {
        return $this->date; # Hatalı kullanım!
    }
}
Notice: Accessing static property Car::$date as non static in C:\xampp\htdocs\test.php on line 9