"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP 속성: PHP 속성을 사용하고 사용자 정의 속성 클래스를 만드는 방법 – 빠른 팁

PHP 속성: PHP 속성을 사용하고 사용자 정의 속성 클래스를 만드는 방법 – 빠른 팁

2024-11-03에 게시됨
검색:931

PHP 속성은 PHP 8.0에서 도입되었습니다. 이 버전은 코드 선언에 메타데이터를 추가하기 위한 속성 도입을 포함하여 몇 가지 새로운 기능과 개선 사항을 제공하여 언어에 있어 중요한 이정표를 세웠습니다.

처음으로 속성을 처리해야 했던 것은 Inspector의 PHP 라이브러리 문제 때문이었습니다. GitHub에서 확인하세요. 솔루션을 더 자세히 살펴보기 전에 속성이 무엇인지, PHP 코드에서 속성을 어떻게 사용할 수 있는지 개요를 살펴보겠습니다.

특성은 클래스, 메서드 또는 속성과 같은 선언에 메타데이터를 추가할 수 있는 강력한 기능입니다. 이러한 메타데이터는 프로그래밍 방식으로 검색할 수 있어 더욱 깔끔하고 체계적이며 효율적인 코드를 위한 새로운 가능성을 열어줍니다.

기억하세요. 속성은 런타임에 영향을 미치지 않습니다. Reflection API에서 이를 사용하여 클래스, 메서드 또는 속성에 연결된 속성을 기반으로 실행하려는 항목을 애플리케이션에서 인식할 수 있습니다.

내장 속성

PHP에는 다양한 용도로 사용되는 여러 내장 속성이 있습니다. 다음은 몇 가지 주목할만한 사항입니다.

@사용되지 않음

함수나 메소드를 더 이상 사용되지 않는 것으로 표시하여 향후 버전에서 제거될 수 있으므로 피해야 함을 나타냅니다.

#[Deprecated("Use newFunction() instead")]
function oldFunction() 
{
    // Function implementation
}

@보수

하위 클래스의 메서드가 상위 클래스의 메서드를 재정의하도록 보장합니다.

class Child extends Parent {
    #[Override]
    public function defaultMethod() 
    {
        // Method implementation
    }
}

defaultMethod()가 결국 상위 클래스에서 이름을 변경하는 경우 이는 더 이상 재정의가 아닙니다. 이 경우, 우리가 재정의할 것으로 예상하고 정렬 오류에 대해 경고하기 때문에 PHP는 경고를 발생시킵니다.

어쨌든 좋은 IDE를 사용하면 이런 실수가 발생하지 않도록 해야 합니다.

@SuppressWarnings

특정 코드 부분에 대한 특정 경고를 표시하지 않습니다.

#[SuppressWarnings("SomeWarning")]
function someFunction() 
{
    // Function implementation
}

사용자 정의 속성 클래스 생성

이제 사용자 정의 속성 클래스를 만들어 보겠습니다. 이는 속성 내에서 특정 동작을 캡슐화하려는 경우 유용합니다.

#[Attribute]
class CustomAttribute 
{
    public string $message;

    public function __construct(string $message) 
    {
        $this->message = $message;
    }
}

그런 다음 다양한 요소에 이 맞춤 속성을 사용할 수 있습니다.

class MyClass 
{
    #[CustomAttribute("This is a custom attribute")]
    public $myProperty;

    #[CustomAttribute("Another custom attribute")]
    public function myMethod() 
    {
        // Method implementation
    }
}

사용 예

실제 사례를 살펴보겠습니다. 웹 애플리케이션을 구축 중이고 문자열 길이를 정의하기 위해 사용자 정의 속성을 생성한다고 가정합니다.

#[Attribute(Attribute::TARGET_PROPERTY)]
class MaxLength 
{
    public int $maxLength;

    public function __construct(int $maxLength) 
    {
        $this->maxLength = $maxLength;
    }
}

위의 예에서는 속성을 클래스 속성에만 적용하는 기능을 제한했습니다. 이제 User 클래스에서 이를 사용할 수 있습니다:

class User 
{
    #[MaxLength(20, message: "Username must be 20 characters or less")]
    public string $username;

    // Other properties and methods
}

속성에 속성을 추가하기 전에 언급했듯이 실행 중에는 영향을 미치지 않습니다. 하지만 이제 리플렉션을 사용하여 이 정보를 검색하여 결국에는 어떤 조치를 취할 수 있습니다.

PHP 프레임워크에 의한 채택

Symfony 및 Laravel과 같이 가장 많이 사용되는 PHP 프레임워크는 이미 기본적으로 "주석"을 대체하는 속성을 채택하고 있습니다. Symfony 5.2 이상에서는 다음 속성을 사용하여 컨트롤러를 선언하고 이를 경로에 연결할 수 있습니다:

public class Arrayable implements \ArrayAccess
{
    …

    public function offsetExists($offset)
    {
        return isset($this->data[$offset]);
    }

    …
}

PHP 8부터 ArrayAccess 인터페이스의 정의가 다음과 같이 변경되었습니다.

PHP Attributes: how to use PHP Attributes and create custom attribute classes – Fast Tips

속성을 사용하여 오프셋 함수의 인수에 대한 데이터 유형 선언을 시행했습니다. LanguageLevelTypeAware 속성을 사용하여 구현 시 인수에 대한 데이터 유형을 제공하지 않으면 "지원 중단 경고"가 발생합니다.

그러나 함수 인수에서 데이터 유형을 선언하면 인수 데이터 유형 선언을 지원하지 않는 이전 버전의 PHP와의 호환성이 손상됩니다.

향후 변경 사항에 대한 경고일 뿐이므로 경고를 억제하기 위해 또 다른 내장 PHP 속성을 사용하여 문제를 해결했습니다.

public class Arrayable implements \ArrayAccess
{
    …

    #[\ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->data[$offset]);
    }

    …
}

ReturnTypeWillChange 속성은 단순히 PHP에 언어의 향후 변경 사항을 알고 있으며 필요한 업데이트를 이미 계획했음을 알려줍니다.

특히 이번 변경 사항은 PHP 9에서 확실히 구현될 예정입니다.

코드베이스를 깨끗하고 잘 문서화하여 속성을 신중하게 사용하는 것을 잊지 마세요. 이는 확장성, 유지 관리 가능성 및 효율성이 가장 중요한 SaaS 제품 개발에서 특히 중요합니다.

Inspector를 처음 사용하시나요? 무료로 애플리케이션을 모니터링하세요

Inspector는 소프트웨어 개발자를 위해 특별히 설계된 코드 실행 모니터링 도구입니다. 서버 수준에서 아무것도 설치할 필요가 없습니다. composer 패키지만 설치하면 바로 사용할 수 있습니다.

다른 복잡한 올인원 플랫폼과 달리 Inspector는 매우 쉽고 PHP 친화적입니다. Laravel 또는 Symfony 패키지를 사용해 볼 수 있습니다.

효과적인 자동화, 심층적인 통찰력, 경고 및 알림을 메시징 환경으로 전달하는 기능을 찾고 있다면 Inspector를 무료로 사용해 보세요. 계정을 등록하세요.

또는 웹사이트에서 자세한 내용을 알아보세요: https://inspector.dev

PHP Attributes: how to use PHP Attributes and create custom attribute classes – Fast Tips

릴리스 선언문 이 기사는 https://dev.to/inspector/php-attributes-how-to-use-php-attributes-and-create-custom-attribute-classes-fast-tips-7nf?1에서 재현됩니다. 침해, 삭제하려면 [email protected]으로 문의하세요.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3