Anonim Sınıflar

Anonim sınıflar basit, tek seferlik nesnelerin oluşturulması gerektiğinde kullanışlıdır.

<?php

// Örtük sınıf kullanarak
class Logger
{
public function
log($msg)
{
echo
$msg;
}
}

$util->setLogger(new Logger());

// Anonim sınıf kullanarak
$util->setLogger(new class {
public function
log($msg)
{
echo
$msg;
}
});

Bağımsız değişkenlerini kurucularına iletebilir, diğer sınıfları genişletebilir, arayüzleri gerçekleyebilir ve normal bir sınıf gibi nitelikleri kullanabilirler:

<?php

class SomeClass {}
interface
SomeInterface {}
trait
SomeTrait {}

var_dump(new class(10) extends SomeClass implements SomeInterface {
private
$num;

public function
__construct($num)
{
$this->num = $num;
}

use
SomeTrait;
});

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

 object(class@anonymous)#1 (1) { ["Command line code0x104c5b612":"class@anonymous":private]=> int(10) } 

Anonim bir sınıfı başka bir sınıfta yerleştirmek, herhangi bir özel veya korunan yönteme veya bu dış sınıfın özelliklerine erişim sağlamaz. Dış sınıfın korumalı özelliklerini veya yöntemlerini kullanabilmek için, anonim sınıf dış sınıfı genişletebilir. Dış sınıfın anonim sınıftaki özel özelliklerini kullanmak için kurucusundan geçirilmesi gerekir:

<?php

class Outer
{
private
$prop = 1;
protected
$prop2 = 2;

protected function
func1()
{
return
3;
}

public function
func2()
{
return new class(
$this->prop) extends Outer {
private
$prop3;

public function
__construct($prop)
{
$this->prop3 = $prop;
}

public function
func3()
{
return
$this->prop2 + $this->prop3 + $this->func1();
}
};
}
}

echo (new
Outer)->func2()->func3();

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

 6 

Aynı anonim sınıf bildirimiyle oluşturulan tüm nesneler, bu sınıfın örnekleridir.

<?php
function anonymous_class()
{
return new class {};
}

if (
get_class(anonymous_class()) === get_class(anonymous_class())) {
echo
'aynı sınıf';
} else {
echo
'farklı sınıf';
}

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

 aynı sınıf 

Bilginize:

Aşağıdaki örnekte gösterildiği gibi, anonim sınıflara motor tarafından bir ad verildiğini unutmayın. Bu isim, güvenilmemesi gereken bir gerçekleme ayrıntısı olarak görülmelidir.

<?php
echo get_class(new class {});

Yukarıdaki örnek şuna benzer bir çıktı üretir:

 class@anonymous/in/oNi1A0x7f8636ad2021 
To Top