Özellikler

Sınıf üyesi değişkenlere özellik denir. Bunlara bazan öznitelik veya alan dendiği de olur, fakat bu kılavuzun amaçları doğrultusunda biz özellik terimini kullanacağız. Bunlar normal değişken bildiriminin önüne public, protected veya private anahtar sözcüklerinden biri ve PHP 7.4 itibariyle ardından isteğe bağlı bir tür bildirimi getirilerek bildirilir. Bu bildirim, bir ilklendirme olarak da yapılabilir; bu durumda bir sabit değerle ilklendirme yapılmalıdır.

public, protected, ve private sözcüklerinin anlamları için Görünürlük belgesine bakınız.

Bilginize:

Sınıf özelliklerini bildirmenin diğer bir yolu, önerilmemekle birlikte, PHP 4 ile geriye uyumluluğu sağlamak için, var sözcüğünü kullanmaktır. Böyle bir durumda özellik public bildirilmiş gibi ele alır.

Statik olmayan özelliklere, yöntemleri içinden -> (Nesne İşleci): $this->özellik (burada özellik özelliğin ismidir) kullanarak erişilir. Statik özelliklere ise :: (Çift İki nokta imi): self::özellik kullanarak erişilir. Statik ve statik olmayan özellikler arasıdaki fark hakkında daha ayrıntılı bilgi için static Anahtar Sözcüğü bölümüne bakınız.

Yöntem bir nesne bağlamından çağrılıyorsa $this sözde değişkeni sınıf yöntemleri içinde de kullanılabilir. $this, yöntemi çağıran nesnenin değeridir.

Örnek 1 - Özellik bildirimi

<?php
class SimpleClass
{
   public 
$var1 'hello ' 'world';

   public 
$var2 = <<<EOD
hello world
EOD;
   public 
$var3 1+2;

   
// geçersiz özellik bildirimleri:
   
public $var4 self::myStaticMethod();
   public 
$var5 $myVar;

   
// geçerli özellik bildirimleri:
   
public $var6 myConstant;
   public 
$var7 = [truefalse];

   public 
$var8 = <<<'EOD'
hello world
EOD;
}
?>

Bilginize:

Sınıflar ve nesnelerle çalışan bazı işlevler vardır. Bunlar için Sınıf ve Nesne İşlevleri bölümüne bakınız.

Tür Bildirimleri

PHP 7.4.0 ve sonrasında özellik tanımı bir callable istisnası ile tür bildirimi içerebilmektedir.

Örnek 2 - Tür ile özellik bildirimi

<?php

class User
{
    public 
int $id;
    public ?
string $name;

    public function 
__construct(int $id, ?string $name)
    {
        
$this->id $id;
        
$this->name $name;
    }
}

$user = new User(1234null);

var_dump($user->id);
var_dump($user->name);

?>

Yukarıdaki örneğin çıktısı:

int(1234)
NULL

Tür bildirimli özellikler erişilmeden önce ilklendirilmelidir, aksi takdirde bir Error yavrulanır.

Örnek 3 - Özelliklere erişim

<?php

class Shape
{
    public 
int $numberOfSides;
    public 
string $name;

    public function 
setNumberOfSides(int $numberOfSides): void
    
{
        
$this->numberOfSides $numberOfSides;
    }

    public function 
setName(string $name): void
    
{
        
$this->name $name;
    }

    public function 
getNumberOfSides(): int
    
{
        return 
$this->numberOfSides;
    }

    public function 
getName(): string
    
{
        return 
$this->name;
    }
}

$triangle = new Shape();
$triangle->setName("triangle");
$triangle->setNumberofSides(3);
var_dump($triangle->getName());
var_dump($triangle->getNumberOfSides());

$circle = new Shape();
$circle->setName("circle");
var_dump($circle->getName());
var_dump($circle->getNumberOfSides());
?>

Yukarıdaki örneğin çıktısı:

string(8) "triangle"
int(3)
string(6) "circle"

Fatal error: Uncaught Error: Typed property Shape::$numberOfSides must not be accessed before initialization