Приложими са само когато ни трябва обект, само за момента, еднократно.
Могат да приемат аргументи само през конструктора си.
Могат да наследяват
Могат да имплементират.
Могат да използват трейтове.
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();