Après PHP7, la fonctionnalité de classe anonyme a été ajoutée à PHP. Les classes anonymes et les méthodes anonymes font de PHP un langage plus moderne et rendent notre travail de développement de code de plus en plus pratique. Examinons d'abord l'utilisation simple des classes anonymes.
// 直接定义 $objA = new class { public function getName() { echo "I'm objA"; } }; $objA->getName(); // 方法中返回 function testA() { return new class { public function getName() { echo "I'm testA's obj"; } }; } $objB = testA(); $objB->getName(); // 作为参数 function testB($testBobj) { echo $testBobj->getName(); } testB(new class{ public function getName() { echo "I'm testB's obj"; } });
donne trois méthodes pour utiliser les classes anonymes à la fois. Les classes anonymes peuvent être directement définies sur des variables, peuvent être renvoyées à l'aide de méthodes return in ou peuvent être transmises en tant que paramètres aux méthodes. En fait, une classe anonyme est comme une classe qui n’est pas définie à l’avance, mais qui est instanciée directement lors de sa définition.
// 继承、接口、访问控制等 class A { public $propA = 'A'; public function getProp() { echo $this->propA; } } trait B { public function getName() { echo 'trait B'; } } interface C { public function show(); } $p4 = 'b4'; $objC = new class($p4) extends A implements C { use B; private $prop1 = 'b1'; protected $prop2 = 'b2'; public $prop3 = 'b3'; public function __construct($prop4) { echo $prop4; } public function getProp() { parent::getProp(); echo $this->prop1, '===', $this->prop2, '===', $this->prop3, '===', $this->propA; $this->getName(); $this->show(); } public function show() { echo 'show'; } }; $objC->getProp();
Les classes anonymes, comme les classes ordinaires, peuvent hériter d'autres classes, implémenter des interfaces et bien sûr inclure diverses fonctionnalités de contrôle d'accès. En d’autres termes, les classes anonymes ne sont pas différentes des classes ordinaires utilisées. Mais si vous utilisez get_class() pour obtenir le nom de la classe, ce sera le nom de la classe généré automatiquement par le système. Le nom renvoyé par la même classe anonyme est bien entendu le même.
// 匿名类的名称是通过引擎赋予的 var_dump(get_class($objC)); // 声明的同一个匿名类,所创建的对象都是这个类的实例 var_dump(get_class(testA()) == get_class(testA())); 那么匿名类中的静态成员呢?当然也和普通类一样,静态成员是属于类而不是实例的。 // 静态变量 function testD() { return new class{ public static $name; }; } $objD1 = testD(); $objD1::$name = 'objD1'; $objD2 = testD(); $objD2::$name = 'objD2'; echo $objD1::$name;
Lorsque la variable statique de la classe est modifiée, la variable statique de toutes les instances de classe changera en conséquence. C'est aussi la caractéristique des membres statiques des classes ordinaires.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!