Анонимни класове в PHP

Приложими са само когато ни трябва обект, само за момента, еднократно.

Могат да приемат аргументи само през конструктора си.

Могат да наследяват

Могат да имплементират.

Могат да използват трейтове.

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

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

    use SomeTrait;
});

Ако в нормален клас имаме анонимен клас, той не е част от скоупа на нормалният (външният).

За да може анонимният клас да има достъп до protected методи/пропъртита на „външният“, трябва да го наследи.

А за да има достъп до private такива на „външният“ – трябва да ги получат като аргументи на конструктора.

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();

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *