> 백엔드 개발 > PHP7 > 본문

PHP7에서 익명 클래스를 사용하는 방법

Guanhui
풀어 주다: 2023-02-17 14:48:01
앞으로
2922명이 탐색했습니다.

PHP7 이후 PHP에 익명 클래스 기능이 추가되었습니다. 익명 클래스와 익명 메서드는 PHP를 더욱 현대적인 언어로 만들고 코드 개발 작업을 더욱 편리하게 만듭니다. 먼저 익명 클래스의 간단한 사용법을 살펴보겠습니다.

// 直接定义
$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";
        }
    });
로그인 후 복사

는 익명 클래스를 한 번에 사용하는 세 가지 방법을 제공합니다. 익명 클래스는 변수로 직접 정의할 수 있고, 메서드의 반환을 사용하여 반환하거나 메서드에 매개 변수로 전달할 수 있습니다. 실제로 익명 클래스는 미리 정의되지 않고 정의 시 직접 인스턴스화되는 클래스와 같습니다.

// 继承、接口、访问控制等
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();
로그인 후 복사

익명 클래스는 일반 클래스와 마찬가지로 다른 클래스를 상속하고 인터페이스를 구현할 수 있으며 물론 다양한 액세스 제어 기능을 포함할 수 있습니다. 즉, 익명 클래스는 사용되는 일반 클래스와 다르지 않습니다. 그러나 클래스 이름을 얻기 위해 get_class()를 사용하면 시스템에서 자동으로 생성된 클래스 이름이 됩니다. 동일한 익명 클래스가 반환하는 이름은 물론 동일합니다.

// 匿名类的名称是通过引擎赋予的
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;
로그인 후 복사

클래스의 정적 변수가 수정되면 모든 클래스 인스턴스의 정적 변수도 그에 따라 변경됩니다. 이는 일반 클래스의 정적 멤버의 특징이기도 합니다.

위 내용은 PHP7에서 익명 클래스를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:zhihu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿