static
Anahtar SözcüğüBu sayfada duruk yöntem ve özellikleri tanımlamak için static anahtar sözcüğünün kullanımı açıklanmıştır. static ayrıca, duruk değişkenleri tanımlamak ve duruk içselleştirim için de kullanılır. Lütfen static anahtar sözcüğünün anlamları hakkında bilgi edinmek için bu sayfalara bakınız.
Sınıf özelliklerinin ya da yöntemlerinin static
olarak
tanımlanması, o özelliklerin ve yöntemlerin sınıf örneğinin oluşturulmasına
gerek kalmadan erişilebilir olmalarını sağlar. Ancak, static
olarak bildirilmiş bir özelliğe (duruk özellik) örneklenmiş sınıf
nesnesinden erişilemez (ise de static
olarak bildirilmiş bir
yöntemle erişebilir).
PHP 4 ile uyumluluğun sağlanabilmesi için, eğer bir özellik veya yöntem için hiçbir görünürlük tanımı yapılmamışsa public olarak tanımlanmış varsayılır.
Duruk yöntemlerin, nesnenin bir örneği oluşturulmadan erişilebilir
olmalarından dolayı, $this sözde değişkeni,
static
olarak bildirilmiş bir yöntemin içinde kullanılamaz.
PHP 5'te, duruk olmayan özellikler durukmuş gibi çağrılırsa
E_STRICT
seviyesinde bir uyarı üretilir.
PHP 7'de, duruk olmayan yöntemlerin duruk olarak çağrılması artık
önerilmemekte olup bir E_DEPRECATED
uyarısı
üretir.warning. duruk olmayan yöntemlerin duruk olarak çağrılması
desteği yakında kaldırılabilir.
Örnek 1 - Duruk yöntem örneği
<?php
class Foo {
public static function durukYöntem() {
// ...
}
}
Foo::durukYöntem();
$classname = 'Foo';
$classname::durukYöntem(); // PHP 5.3.0 ve sonrası
?>
Duruk özelliklere, nesne üzerinden ok işleci (->) kullanılarak erişilemez.
PHP 5.6 öncesinde diğer duruk değişkenlerde olduğu gibi duruk özellikler de sadece bir sayıl veya sabit kullanılarak ilklendirilebilir; ifadelere izin verilmez. PHP 5.6.0 ve sonrasında const için geçerli kurallar uygulanır: bazı sınırlı ifadeler mümkündür, bunlar derleme sırasında değerlendirilir.
PHP 5.3.0 ve sonrasında, bir sınıfa bir değişken kullanarak gönderim yapılabilmektedir. Böyle bir değişkenin değeri self, parent veya static gibi bir anahtar sözcük olamaz.
Örnek 2 - Duruk özellik örneği
<?php
class Falanca
{
public static $duruk = 'falanca';
public function durukDeğer() {
return self::$duruk;
}
}
class Feşmekan extends Falanca
{
public function falancaDuruk() {
return parent::$duruk;
}
}
print Falanca::$duruk . "\n";
$falanca = new Falanca();
print $falanca->durukDeğer() . "\n";
print $falanca->duruk . "\n"; // Tanımsız "Özellik" duruk
print $falanca::$duruk . "\n";
$sınıfadı = 'Falanca';
print $sınıfadı::$duruk . "\n"; // PHP 5.3.0 ve sonrası
print Feşmekan::$duruk . "\n";
$feşmekan = new Feşmekan();
print $feşmekan->falancaDuruk() . "\n";
?>