Detaillierte Erläuterung der Verwendung anonymer PHP-Klassen

藏色散人
Freigeben: 2023-04-09 18:12:01
nach vorne
3886 Leute haben es durchsucht

Nach PHP7 wurde PHP um die Funktion „Anonyme Klassen“ erweitert. Anonyme Klassen und anonyme Methoden machen PHP zu einer moderneren Sprache und machen unsere Codeentwicklung immer komfortabler. Schauen wir uns zunächst die einfache Verwendung anonymer Klassen an.

Empfohlen: „PHP-Video-Tutorial

// 直接定义
$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";
        }
    });
Nach dem Login kopieren

bietet drei Methoden zur gleichzeitigen Verwendung anonymer Klassen. Anonyme Klassen können direkt als Variablen definiert werden, mithilfe von Return-Methoden zurückgegeben oder als Parameter an Methoden übergeben werden. Tatsächlich ist eine anonyme Klasse wie eine Klasse, die nicht im Voraus definiert wird, sondern direkt bei der Definition instanziiert wird.

// 继承、接口、访问控制等
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();
Nach dem Login kopieren

Anonyme Klassen können wie gewöhnliche Klassen andere Klassen erben, Schnittstellen implementieren und natürlich verschiedene Zugriffskontrollfunktionen enthalten. Mit anderen Worten: Anonyme Klassen unterscheiden sich nicht von gewöhnlichen Klassen. Wenn Sie jedoch get_class() verwenden, um den Klassennamen abzurufen, ist dies der vom System automatisch generierte Klassenname. Der von derselben anonymen Klasse zurückgegebene Name ist natürlich derselbe.

// 匿名类的名称是通过引擎赋予的
var_dump(get_class($objC));

// 声明的同一个匿名类,所创建的对象都是这个类的实例
var_dump(get_class(testA()) == get_class(testA()));
Nach dem Login kopieren

Was ist mit statischen Mitgliedern in anonymen Klassen? Natürlich gehören statische Mitglieder wie gewöhnliche Klassen zur Klasse und nicht zur Instanz.

// 静态变量
function testD()
{
    return new class{
        public static $name;
    };
}
$objD1 = testD();
$objD1::$name = 'objD1';

$objD2 = testD();
$objD2::$name = 'objD2';

echo $objD1::$name;
Nach dem Login kopieren

Wenn die statische Variable in der Klasse geändert wird, ändert sich die statische Variable aller Klasseninstanzen entsprechend. Dies ist auch das Merkmal statischer Mitglieder gewöhnlicher Klassen.

测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/201912/source/PHP%E5%8C%BF%E5%90%8D%E7%B1%BB%E7%9A%84%E7%94%A8%E6%B3%95.php
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung anonymer PHP-Klassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage