Sınıflarda olduğu gibi “static” deyimi Trait yapılarında da kullanılır. Daha öncede belirttiğimiz gibi “static” deyimi ifade edilen özellikler ve davranışlar RAM bellekte tutulur. “Static” olarak ifade edilmiş üyeler RAM bellekte tutulduğundan dolayı son durumları korunur.
<?php trait Sayac { public function artir(){ static $c = 0; $c = $c + 1; echo $c . '<br>'; } } class ortakSinif { use Sayac; } $o = new ornekSinif (); $o->artir (); $Sonuç:1 $o->artir (); $Sonuç:2 $o->artir (); $Sonuç:3 ?>
Yukardaki örnekte “Sayac” isimli Trait içinde “artir()” isminde bir davranış oluşturdu. Bu davranış içerisinde ise “static” deyimi ile bir değişken tanımlandı ve her çağırdığında değeri bir artırılarak ekrana yazdırıldı.
Şimdi bu Trait ile bir sınıfı genişlettiğimizde ve sınıftan örnek alıp “artir()” davranışını her çağırdığımızda “static” deyimi ile tanımlanan değişkenin değeri bir artırılıp ekrana yazdırılacaktır. Dikkat ederseniz, değişken ilk durumda 0 (sıfır) değerini alıyor. Daha sonra ise RAM bellekte tanımlı olduğundan tekrardan değerini sıfırlamadan son değeri ile işlem yapacaktır. Bu durumda kaç defa çağırılırsa ekrana 1,2,3… gibi “n” adet sayı yazacaktır.