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 özellikpublic
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 = [true, false];
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.
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(1234, null);
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