Maison > développement back-end > PHP7 > Comment utiliser des classes anonymes en PHP7

Comment utiliser des classes anonymes en PHP7

Guanhui
Libérer: 2023-02-17 14:48:01
avant
2976 Les gens l'ont consulté

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";
        }
    });
Copier après la connexion

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();
Copier après la connexion

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;
Copier après la connexion

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!

Étiquettes associées:
source:zhihu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal