>백엔드 개발 >PHP 튜토리얼 >자신의 사용자 정의 주석 - 단순한 의견 이상!

자신의 사용자 정의 주석 - 단순한 의견 이상!

Christopher Nolan
Christopher Nolan원래의
2025-02-15 09:22:12868검색

PHP 사용자 정의 주석 : 향상된 코드 유연성 및 확장 성

이 기사에서는 Symfony 3 응용 프로그램에서 사용자 정의 주석을 작성하고 사용하는 방법에 대해 설명합니다. 주석은 문서 ​​블록 메타 데이터/구성입니다. 위의 클래스, 메소드 및 속성은 종종 컨트롤러 라우팅 (), 교리 orm 매핑 ()을 선언하는 데 사용됩니다. 그리고 방법에 대한 액세스. 이 기사는 주석을 사용자 정의하고 클래스를로드하지 않고 클래스 또는 메소드 정보를 읽는 방법을 설명합니다.

키 포인트 :

@Route() PHP 사용자 정의 주석을 사용하여 코드에 메타 데이터를 추가하여 코드의 동작에 영향을 미쳐보다 유연하고 쉽게 적응할 수 있습니다. 라우팅 정보를 정의하거나 검증 규칙을 지정하거나 종속성 주입을 구성하는 데 사용할 수 있습니다. @ORM()

PHP 사용자 정의 주석을 만들려면 주석을 나타내는 새로운 클래스를 정의해야합니다. 이 클래스에는 주석에서 설정하려는 값에 해당하는 속성이 있어야합니다.

교리는 맞춤형 주석을 지원합니다. 자신의 주석을 정의하고 교리 단체에서 사용할 수 있습니다. 교리의 주석 독자는 이러한 주석을 구문 분석 한 다음 그것들을 사용하여 실체의 행동에 영향을 줄 수 있습니다.

PHP 사용자 정의 주석을 사용하는 한 가지 제한은 언어 자체에 의해 기본적으로 지원되지 않는다는 것입니다. 즉, 교리 또는 PHP-DI와 같은 주석 지원을 제공하는 라이브러리 또는 도구를 사용해야합니다. PHP 사용자 정의 주석에는 웹 애플리케이션에서 라우팅 정보를 정의하거나 양식 입력에 대한 검증 규칙을 지정하거나 종속성 주입 구성을 포함하여 다양한 용도가 있습니다. 또한 코드에 문서를 추가하는 데 사용될 수도 있습니다.

  • 면책 조항 :
  • 주석은 Symfony와 아무 관련이 없으며, 교리 프로젝트의 일부로 개발 된 개념은 ORM 정보를 클래스 방법에 매핑하는 문제를 해결하는 개념입니다.
  • 이 기사는 workerBundle이라는 작은 재사용 가능한 번들을 만들 것입니다 (실제로 포장 할 수없는 데 시연 목적으로 만). 우리는 다른 속도로 "실행"하는 다양한 작업자 유형을 정의 할 수있는 작은 개념을 개발하고 응용 프로그램의 모든 사람이 사용할 수 있습니다. 실제 작업자 운영은이 기사의 범위를 벗어납니다. 왜냐하면 우리는 시스템을 관리하고 주석을 통해 시스템을 찾는 데 관심이 있기 때문입니다.
  • 당신은
  • 이 저장소 를 볼 수 있고 그에 설명 된대로 로컬 Symfony 응용 프로그램에 번들을 설정할 수 있습니다.
  • 노동자
  • 작업자는 메소드가 필요한 인터페이스를 구현합니다. 새로운 WorkerBundle에서
  • 디렉토리를 만들어 깔끔하게 유지하고 인터페이스를 추가하겠습니다.
주석

각 작업자는 위의 인터페이스를 구현해야합니다. 매우 분명합니다. 그러나 그 외에도, 우리는 또한 그것들을 찾아서 그들에 대한 메타 데이터를 읽기 위해 수업 위에 주석을 갖추어야합니다. Your Own Custom Annotations - More than Just Comments! 교리지도 문서 블록 주석은 주석 자체 내부의 키를 나타내는 속성의 클래스에 대한 문서 블록 주석. 우리 자신의 주석을 만들어서합시다.

각 WorkerInterface 인스턴스는 문서 블록에 다음 주석이 있습니다.

우리는 독특한 이름 (문자열)과 작업자 속도 (통합)라는 두 가지 속성만으로 단순하게 유지합니다. 교리의 주석 도서관 이이 주석을 인식하기 위해서는 예상대로 자체적으로 주석이있는 일치 클래스를 만들어야합니다.

우리는이 클래스를 번들 네임 스페이스의 주석 폴더에 넣고 간단히 it worker를 명명했습니다.

보시다시피, 우리는 두 가지 속성과 몇 가지 간단한 getter 방법이 있습니다. 더 중요한 것은 상단에 두 개의 주석이 있습니다 :
<code class="language-php"><?php
namespace WorkerBundle\Workers;

interface WorkerInterface
{
    /**
     * 执行工作
     *
     * @return NULL
     */
    public function work();
}</code>
(주석을 나타내는 클래스와 같은 교리를 알려주는 것) 및

(방법이나 속성보다는 전체 클래스 이상을 사용해야 함). 그것이 바로, WorkerInterface 클래스는 이제 해당 클래스가 파일 상단에있는

문을 사용하여 가져 오도록 하여이 주석을 사용할 수 있습니다.

<<> 관리자
<code class="language-php">/**
 * @Worker(
 *     name = "唯一的Worker名称",
 *     speed = 10
 * )
 */</code>
<🎜 🎜> 다음으로, 우리는 응용 프로그램이 사용 가능한 모든 근로자 목록을 얻고 만들 수있는 관리자가 필요합니다. WorkerInterface와 동일한 네임 스페이스 에서이 간단한 관리자 클래스를 사용할 수 있습니다.

<🎜 🎜> <<> 디스커버리 @Annotation @Target("CLASS") 주석 시연의 핵심 부분은 실제로 발견 과정의 일부입니다. 왜? 우리는 근로자 주석을 사용하여 해당 클래스가 근로자로 취급되어야하는지 여부를 결정하기 때문입니다. 이 과정에서는 실제로 객체를 인스턴스화하기 전에 메타 데이터를 사용합니다. WorkerDiscovery 클래스 : <🎜 🎜>를 살펴 보겠습니다 use

<<> 연결 <🎜
<code class="language-php"><?php
namespace WorkerBundle\Annotation;

use Doctrine\Common\Annotations\Annotation;

/**
 * @Annotation
 * @Target("CLASS")
 */
class Worker
{
    /**
     * @Required
     *
     * @var string
     */
    public $name;

    /**
     * @Required
     *
     * @var int
     */
    public $speed;

    /**
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * @return int
     */
    public function getSpeed()
    {
        return $this->speed;
    }
}</code>
이제 우리는 주요 구성 요소를 가지고 있으므로 이제 모든 것을 연결할 때입니다. 먼저 서비스 정의가 필요하므로 번들의 리소스/구성 폴더 에서이 services.yml 파일을 가질 수 있습니다.

컨테이너로 서비스 정의를 중앙에서 선택하려면 소규모 확장 클래스를 작성해야합니다. 따라서 번들의 종속성 주사 폴더에서 workerextension이라는 클래스를 만듭니다. Symfony가 자동으로 픽업하는 데 위치와 이름이 중요합니다. 마지막으로 번들을 등록해야합니다. 우리의 appkernel :

<.> 그게 다야.

우리가 일하자!

이제 우리는 일할 준비가되었습니다. Central Parameters.yml 파일에서 작업자가 어디에서 찾을 수 있는지 구성합시다.
<code class="language-php">use WorkerBundle\Annotation\Worker;</code>
이 매개 변수는 위에서 설명한대로 컨테이너에서 WorkerDiscovery 클래스로 전달됩니다.

위치는 당신에게 달려 있지만 이제 우리 작업자를 앱의 주요 appbundle 번들에 넣으십시오. 우리의 첫 번째 노동자는 다음과 같이 보일 수 있습니다 :

<code class="language-php"><?php
namespace WorkerBundle\Workers;

interface WorkerInterface
{
    /**
     * 执行工作
     *
     * @return NULL
     */
    public function work();
}</code>
우리의 주석이 있고,

진술이 제자리에 있으므로, 일부 비즈니스 논리가 그것을 찾아서 인스턴스화하는 것을 막을 수있는 것은 아무것도 없습니다. 컨트롤러 내부에서 다음을 가정 해 봅시다 : <🎜 🎜> use

또는 <🎜 🎜>
<code class="language-php">/**
 * @Worker(
 *     name = "唯一的Worker名称",
 *     speed = 10
 * )
 */</code>
<🎜 🎜> <<> 결론

이제 주석을 사용하여 클래스 (또는 방법 및 속성)에 대한 메타 데이터를 표현할 수 있습니다. 이 튜토리얼에서는 응용 프로그램 (또는 기타 외부 번들)이 작업자에 대한 메타 데이터를 정의하여 작업을 수행 할 수있는 작업자를 선언 할 수있는 작은 패키지를 작성합니다. 이 메타 데이터는 쉽게 발견 할 수있을뿐만 아니라 실제로 사용되어야하는지에 대한 정보를 제공합니다.
<code class="language-php"><?php
namespace WorkerBundle\Annotation;

use Doctrine\Common\Annotations\Annotation;

/**
 * @Annotation
 * @Target("CLASS")
 */
class Worker
{
    /**
     * @Required
     *
     * @var string
     */
    public $name;

    /**
     * @Required
     *
     * @var int
     */
    public $speed;

    /**
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * @return int
     */
    public function getSpeed()
    {
        return $this->speed;
    }
}</code>

프로젝트에서 사용자 정의 주석을 사용하십니까? 그렇다면 어떻게 구현 했습니까? 세 번째 방법이 있습니까? 알려주세요!

(Symfony, 교리, 주석 및 다양한 기업 수준의 PHP 컨텐츠에 대해 더 많이 배우는 데 관심이 있습니까? 3 일간의 실습 워크샵, WebsummerCamp에 참여하십시오. 당신이 가져오고 싶은 사람은

(원본 텍스트의 FAQ 부분은 컨텐츠가 번역되고 다시 작성된 내용으로 고도로 복제되어 있기 때문에 생략되었습니다.)

위 내용은 자신의 사용자 정의 주석 - 단순한 의견 이상!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.