class
Anahtar SözcüğüHer sınıf tanımı class anahtar sözcüğü ile başlar sınıf isminin ardından gelen bir çift kaşlı ayracın arasında sınıf üyelerinin ve yöntemlerinin tanımları bulunur. Bir nesne bağlamı içinden bir yöntem çağırmak için $this diye bir sözde değişken kullanılır. $this çağrılan nesneye bir gönderimdir (normalde yöntemin ait olduğu nesnedir, ancak eğer nesne diğer nesnenin bağlamından duruk olarak çağrılıyorsa, bu başka bir nesne de olabilir).
Sınıf ismi olarak bir anahtar sözcük kullanılamaz ve bir sınıf ismi başına bir dolar simgesi konulmaması dışında PHP'de değişken isimlendirme kurallarına uygun olmalıdır.
Bu örnekte sınıf oluşturma, nesne olarak örnekleme ve $this sözde değişkeninin kullanımı gösterilmiştir:
Örnek 1 - Nesne yönelimli dilde $this değişkeni
<?php
class A
{
function foo()
{
if (isset($this)) {
echo '$this tanımlı (';
echo get_class($this);
echo ")\n";
} else {
echo "\$this tanımsız.\n";
}
}
}
class B
{
function bar()
{
A::foo();
}
}
$a = new A();
$a->foo();
A::foo();
$b = new B();
$b->bar();
B::bar();
?>
Yukarıdaki örneğin çıktısı:
$this tanımlı (A) $this tanımsız. $this tanımlı (B) $this tanımsız.
Örnek 2 - Basit sınıf tanımı
<?php
class BasitSınıf
{
// üye bildirimi
public $değer = 'bir öntanımlı değer';
// yöntem bildirimi
public function değerGöster() {
echo $this->değer;
}
}
?>
Öntanımlı değer, (örneğin) bir değişken, bir sınıf üyesi veya bir işlev çağrısı değil, bir sabit ifade olmalıdır.
Örnek 3 - Sınıf üyesinin öntanımlı değeri
<?php
class BasitSınıf
{
// geçersiz üye bildirimleri:
public $var1 = 'merhaba '.'dünya';
public $var2 = <<<EOD
merhaba dünya
EOD;
public $var3 = 1+2;
public $var4 = self::birDurukYöntem();
public $var5 = $birDeğer;
// geçerli üye bildirimleri:
public $var6 = birSabit;
public $var7 = self::sınıfSabiti;
public $var8 = array(true, false);
}
?>
Bilginize: Sınıflar ve nesnelerle çalışmak için ilginizi çekebilecek bazı işlevler vardır. Bunlar için Sınıf/Nesne İşlevleri bölümüne bakabilirsiniz.
Duruk veri bağlamında yorumlanan çok satırlı metinler değil (heredoc), yorumlanmayan çok satırlı metinler (nowdoc) kullanılabilir.
Örnek 4 - Duruk veri örneği
<?php
class foo {
// PHP 5.3.0 ve sonrası
public $bar = <<<'EOT'
bar
EOT;
}
?>
Bilginize: Yorumlanmayan çok satırlı metin (nowdoc) desteği 5.3.0'da eklenmiştir.
new
Anahtar SözcüğüBir sınıfın örneğini oluşturmak için yeni bir nesne oluşturulup bir değişkene atanmalıdır. Nesnenin hata durumunda daima yeni bir değişkene atanarak oluşturulması için kurucusunun bir istisna oluşturmaması gerekir. Sınıflar, örnekleme öncesi tanımlanmış olmalıdır (ve bu, bazı durumlarda bir gereksinimdir).
Örnek 5 - Bir sınıf örneğinin oluşturulması
<?php
$örnek = new BasitSınıf();
// Bu bir değişkenle de yapılabilir:
$sınıf = 'BasitSınıf';
$örnek = new $sınıf(); // BasitSınıf()
?>
Sınıf bağlamında yeni bir nesneyi new self veya new parent kullanarak oluşturmak mümkündür.
Oluşturulmuş bir sınıf örneğinin yeni bir değişkene atanması sırasında, yeni değişken, atanan nesneyle aynı örneğe erişecektir. Bu davranışın örneklerin bir işleve aktarılmasından bir farkı yoktur. Kopyalamak suretiyle oluşturulmuş bir nesnenin daima bir kopyası yapılabilir.
Örnek 6 - Nesne Atama
<?php
$atama = $örnek;
$gönderim =& $örnek;
$örnek->var = '$atama bu değere sahip olacak';
$örnek = null; // $örnek ve $gönderim null olur
var_dump($örnek);
var_dump($gönderim);
var_dump($atama);
?>
Yukarıdaki örneğin çıktısı:
NULL NULL object(BasitSınıf)#1 (1) { ["var"]=> string(30) "$atama bu değere sahip olacak" }
extends
Anahtar Sözcüğü
Bir sınıfın bildiriminde extends
anahtar sözcüğü
kullanılarak başka bir sınıfın yöntemleri ve üyeleri miras alınabilir.
Çok sayıda sınıfı miras alarak genişlemek mümkün değildir, bir sınıf
sadece bir ana sınıfı miras alabilir.
Miras alınan yöntemler ve üyeler, ebeveyn sınıfta tanımlı isimleriyle yeniden bildirilerek geçersiz kılınabilir; bu sadece ebeveyn sınıfın final tanımlı yöntemleri için yapılamaz. Geçersiz kılınmış yöntemlere ve duruk üyelere parent:: öneki ile atıfta bulunarak erişilebilir.
Örnek 7 - Basit bir sınıfın miras alınması
<?php
class EkSınıf extends BasitSınıf
{
// ebeveyn yöntemi yeniden bildirelim
function değerGöster()
{
echo "Sınıf genişletiliyor\n";
parent::değerGöster();
}
}
$ek = new EkSınıf();
$ek->değerGöster();
?>
Yukarıdaki örneğin çıktısı:
Sınıf genişletiliyor bir öntanımlı değer