Home > Backend Development > PHP7 > How to use anonymous classes in PHP7

How to use anonymous classes in PHP7

Guanhui
Release: 2023-02-17 14:48:01
forward
2940 people have browsed it

After PHP7, the anonymous class feature was added to PHP. Anonymous classes and anonymous methods make PHP a more modern language and make our code development work more and more convenient. Let's first look at the simple use of anonymous classes.

// 直接定义
$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";
        }
    });
Copy after login

Three methods of using anonymous classes are given at once. Anonymous classes can be directly defined as variables, can be returned using return in methods, or can be passed as parameters to methods. In fact, an anonymous class is like a class that is not defined in advance, but is instantiated directly when it is defined.

// 继承、接口、访问控制等
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();
Copy after login

Anonymous classes, like ordinary classes, can inherit other classes, implement interfaces, and of course include various access control capabilities. In other words, anonymous classes are no different from ordinary classes in use. But if you use get_class() to get the class name, it will be the class name automatically generated by the system. The name returned by the same anonymous class is of course the same.

// 匿名类的名称是通过引擎赋予的
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;
Copy after login

When the static variable in the class is modified, the static variable of all class instances will change accordingly. This is also the characteristic of static members of ordinary classes.

The above is the detailed content of How to use anonymous classes in PHP7. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:zhihu.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template