PHP Anonymous classes

PHPServer Side ProgrammingProgramming

Introduction

As th name suggests, anonymous class is the one which doesn't have name. It is meant for one time use, and if one needs to define a class on the fly. Feature of anonymous class has been introduced since PHP 7 version.

Definition of anonymous class lies inside an expression whose result is an object of that class. It is defined with new class syntax as follows

Syntax

<?php
$obj=new class {
   public function sayhello(){
      echo "Hello World";
   }
};
$obj->sayhello();
?>

Anonymous class can perform everything that a normal can i.e. extend another class, implement interface or use trait

In following code, an anonymous class extends parentclass and implements parentinterface

Example

 Live Demo

<?php
class parentclass{
   public function test1(){
      echo "test1 method in parent class\n";
   }
}
interface parentinterface{
   public function test2();
}
$obj=new class() extends parentclass implements parentinterface {
   public function test2(){
      echo "implements test2 method from interface";
   }
};
$obj->test1();
$obj->test2();
?>

Output

The output is as below −

test1 method in parent class
implements test2 method from interface

Nested anonymous class

Anonymous class can be nested inside body of other class method. However, its object doesn't have access to private or protected members of outer class

Example

 Live Demo

<?php
class testclass{
   public function test1(){
      return new class(){
         public function test2(){
            echo "test2 method of nested anonymous class";
         }
      };
   }
}
$obj2=new testclass();
$obj2->test1()->test2();
?>

Output

Above code produces following result −

test2 method of nested anonymous class

Internal name of anonymous class

PHP parser does give a unique name to anonymous class for internal use

Example

 Live Demo

<?php
var_dump(get_class(new class() {} ));
?>

Output

This will produce output similar to following −

string(60) "class@anonymous/home/cg/root/1569997/main.php0x7f1ba68da026"
raja
Published on 18-Sep-2020 09:43:07
Advertisements