키 테이크 아웃
PHP 5.4.0 이후에 사용할 수있는
특성은 다른 클래스 내에 메소드 세트를 포함하여 코드 반복을 줄여 코드를 재사용하는 방법을 제공합니다. 그들은 교체 환경에서 교리 orm과 함께 사용될 수 있습니다. .
특성은 인터페이스와 혼동되어서는 안됩니다. 인터페이스는 객체가 할 수있는 일을 나타내는 계약이지만, 특성은 물체에 할 수있는 능력을 제공합니다.
특성은 데이터베이스 아키텍처를 구성하고 코드 복제를 피하는 데 특히 유용 할 수 있습니다. 예를 들어, 'create_at'및 'updated_at'필드가 필요한 기사 및 주석 엔티티를 만들 때 이러한 공통 속성은 반복을 피하기 위해 특성에 포함될 수 있습니다. .
특성은 더 가볍고 유연한 코드를 생산하기위한 훌륭한 도구이지만 과도하게 사용해서는 안됩니다. 때로는 고유 한 클래스 구현을 구성하는 것이 좋습니다. 응용 프로그램을 올바르게 설계하는 데 충분한 시간이 걸리는 것이 중요합니다. -
PHP 5.4.0 이후 PHP는 "TRACITS"라는 코드를 재사용하는 예쁜 방법을 지원합니다. 이는 자신을 반복하지 않기 위해 다른 클래스에 포함시킬 수있는 일련의 방법입니다. 이전에 게시 된 itepoint 게시물에서 특성에 대한 자세한 내용을 읽을 수 있습니다.
-
오늘, 나는 그들이 Symfony 환경에서 교리 orm과 함께 어떻게 사용할 수 있는지 보여 드리겠습니다.
특성 기본
-
우리가 볼 수 있듯이, 기본 메소드 SayHello ()는 A 및 B 클래스에서 사용 명령문으로 구현 된 특성 내부에서 선언됩니다. 쉽지? 이 예는 실제로 짧지 만 특성으로 작업 할 기본 지식을 제공해야합니다.
특성에 관심이 있다면 공식 문서와 이전에 게시 된 itepoint 게시물을 여기, 여기 및 여기에서 읽어 개념을 완전히 파악하는 것이 좋습니다. -
많은 사람들이 특성과 인터페이스의 차이를 보지 않는다는 사실에 대해 경고 할 수 있습니다. 실용적인 설명은 다음과 같습니다
인터페이스는“이 객체 가이 일을 할 수있다”는 계약이며, 특성은 물체에 일을 할 수있는 능력을 제공하는 것입니다.
.
보다 심층적 인 설명을 위해 필립 브라운 (Philip Brown) 의이 통찰력있는 게시물을 자유롭게 살펴보십시오.
데이터베이스 아키텍처를 구성 할 때 코드 복제에 직면하는 것은 드문 일이 아닙니다. 예를 들어, 일반적인 블로그 응용 프로그램을 개발해야한다고 가정 해 봅시다. 어느 시점에서, 우리는 기본 기사 엔티티와 댓글 엔티티를 만들 것입니다.
.
두 엔티티는 모두 생성 된 혜택을 얻을 수 있습니다. 그러나 특성을 파헤 치기 전에, 우리가 그들없이 교리로 그 실체를 어떻게 지을 수 있는지 봅시다.
.1 단계 : 엔티티를 만듭니다
기사 엔티티
주석 엔티티
동일한 속성 $ createat 및 $ updatedat가 두 클래스에 모두 포함됩니다. 이것은 건조하지 않습니다. 특성 이이 코드를 청소하는 데 도움이 될까요?
2 단계 : 특성을 만듭니다
<span><span><?php
</span></span><span><span>trait ExampleTrait {
</span></span><span> <span>public function sayHello() {
</span></span><span> <span>echo "Hello";
</span></span><span> <span>}
</span></span><span><span>}
</span></span><span>
</span><span><span>class A {
</span></span><span> <span>use ExampleTrait;
</span></span><span><span>}
</span></span><span>
</span><span><span>class B {
</span></span><span> <span>use ExampleTrait;
</span></span><span><span>}
</span></span><span>
</span><span><span>$one = new A();
</span></span><span><span>$one->sayHello(); /* return `Hello` */
</span></span><span>
</span><span><span>$two = new B();
</span></span><span><span>$two->sayHello(); /* return `Hello`, too */</span></span>
로그인 후 복사
다음은 초기 복제 코드를 이동 한 예쁜 특성 파일입니다. $ createdAt 및 $ updatedat와 모든 관련된 방법은 이제 엔티티와 분리됩니다. 결과적으로 다른 곳에서 사용하는 것이 훨씬 쉽습니다. 키워드 사용이 포함 된 소개 섹션을 기억하십시오. <h3>
3 단계 : 엔티티를 리팩터 </h3>
기사 엔티티 <pre class="brush:php;toolbar:false"><span><span><?php
</span></span><span><span>namespace Blog<span>\AppBundle\Entity</span>;
</span></span><span>
</span><span><span>use Doctrine<span>\ORM\Mapping</span> as ORM;
</span></span><span>
</span><span><span>/**
</span></span><span><span> * @ORM\Table(name="article")
</span></span><span><span> * @ORM\Entity(repositoryClass="Blog\AppBundle\Entity\ArticleRepository")
</span></span><span><span> */
</span></span><span><span>class Article
</span></span><span><span>{
</span></span><span> <span>/**
</span></span><span><span> * @ORM\Column(name="idArticle" type="integer")
</span></span><span><span> * @ORM\Id()
</span></span><span><span> * @ORM\GeneratedValue(strategy="AUTO")
</span></span><span><span> */
</span></span><span> <span>private $id;
</span></span><span>
</span><span> <span>/* Other properties you need in your entity: $title, $content, $author... */
</span></span><span>
</span><span> <span>/** @ORM\Column(name="created_at" type="datetime") */
</span></span><span> <span>private $createdAt;
</span></span><span>
</span><span> <span>/** @ORM\Column(name="updated_at" type="datetime") */
</span></span><span> <span>private $updatedAt;
</span></span><span>
</span><span> <span>/* Getters & Setters */
</span></span><span><span>}</span></span>로그인 후 복사
주석 엔티티
완료! 명령 줄을 사용해 봅시다. 먼저 데이터베이스에서 엔티티를 만들어 봅시다 :
<span><span><?php
</span></span><span><span>namespace Blog<span>\AppBundle\Entity</span>;
</span></span><span>
</span><span><span>use Doctrine<span>\ORM\Mapping</span> as ORM;
</span></span><span>
</span><span><span>/**
</span></span><span><span> * @ORM\Table(name="comment")
</span></span><span><span> * @ORM\Entity(repositoryClass="Blog\AppBundle\Entity\CommentRepository")
</span></span><span><span> */
</span></span><span><span>class Comment
</span></span><span><span>{
</span></span><span> <span>/**
</span></span><span><span> * @ORM\Column(name="idComment" type="integer")
</span></span><span><span> * @ORM\Id()
</span></span><span><span> * @ORM\GeneratedValue(strategy="AUTO")
</span></span><span><span> */
</span></span><span> <span>private $id;
</span></span><span>
</span><span> <span>/* Other properties you need in your entity */
</span></span><span>
</span><span> <span>/** @ORM\Column(name="created_at" type="datetime") */
</span></span><span> <span>private $createdAt;
</span></span><span>
</span><span> <span>/** @ORM\Column(name="updated_at" type="datetime") */
</span></span><span> <span>private $updatedAt;
</span></span><span>
</span><span> <span>/* Getters & Setters */
</span></span><span><span>}</span></span>
로그인 후 복사
이 명령은 다음과 같습니다
이제이 클래스에서 새 개체를 만들려면 모두 공통 방법을 사용할 수 있음을 알게 될 것입니다.
분명히, 우리는 이제 데이터를 지속 할 준비가되었습니다.
더 나아가
현재, Symfony 구에서 많은 번들과 확장은 이러한 일을하는 방식을 고수하는 경향이 있습니다. Knplabs의 교리 적 비하비어 라이브러리는 엔티티와 리포지토리를위한 훌륭한 특성 모음을 제공합니다. 같은 마음의 상태에서, 나는 당신이 잘 알려진 교리 혁신 번들, 특히 타임 스탬블 동작 확장에 관한 모든 것을 심도있게 보는 것이 좋습니다.
.
최종 생각
특성은 흡수하기가 어렵지 않습니다. 그들은 더 가볍고 유연한 코드를 생산하는 훌륭한 방법입니다. 그들을 남용하지 않도록주의하십시오. 때로는 고유 한 클래스 구현을 구성하는 것이 좋습니다. 앱을 올바르게 디자인하기 위해 충분한 시간을 소비하는 것이 얼마나 중요한지 강조 할 수 없습니다. 그들이 당신을 도울 수 있다고 생각한다면 그들에게 가십시오. 당신의 것을 만들고, 테스트하고 당신이 그들을 어떻게 사용했는지 알려주세요!
교리 단체에서 특성을 사용하는 것에 대한 자주 묻는 질문 (FAQ)
교리 단체에서 특성을 사용하면 어떤 이점이 있습니까? <span><span><?php
</span></span><span><span>// src/Blog/AppBundle/Entity/Traits/TimestampableTrait.php
</span></span><span>
</span><span><span>namespace Blog<span>\AppBundle\Entity\Traits</span>;
</span></span><span>
</span><span><span>use Doctrine<span>\ORM\Mapping</span> as ORM;
</span></span><span>
</span><span><span>trait TimestampableTrait
</span></span><span><span>{
</span></span><span> <span>/**
</span></span><span><span> * <span>@var datetime $createdAt
</span></span></span><span><span> *
</span></span><span><span> * @ORM\Column(name="created_at", type="datetime")
</span></span><span><span> */
</span></span><span> <span>private $createdAt;
</span></span><span>
</span><span> <span>/**
</span></span><span><span> * <span>@var datetime $updatedAt
</span></span></span><span><span> *
</span></span><span><span> * @ORM\Column(name="updated_at", type="datetime")
</span></span><span><span> */
</span></span><span> <span>private $updatedAt;
</span></span><span>
</span><span>
</span><span> <span>/**
</span></span><span><span> * Get createdAt
</span></span><span><span> *
</span></span><span><span> * <span>@return datetime
</span></span></span><span><span> */
</span></span><span> <span>public function getCreatedAt()
</span></span><span> <span>{
</span></span><span> <span>return $this->createdAt;
</span></span><span> <span>}
</span></span><span>
</span><span> <span>/**
</span></span><span><span> * Set createdAt
</span></span><span><span> *
</span></span><span><span> * <span>@param datetime $createdAt
</span></span></span><span><span> */
</span></span><span> <span>public function setCreatedAt($createdAt)
</span></span><span> <span>{
</span></span><span> <span>$this->createdAt = $createdAt;
</span></span><span>
</span><span> <span>return $this;
</span></span><span> <span>}
</span></span><span>
</span><span> <span>/**
</span></span><span><span> * Get updatedAt
</span></span><span><span> *
</span></span><span><span> * <span>@return datetime
</span></span></span><span><span> */
</span></span><span> <span>public function getUpdatedAt()
</span></span><span> <span>{
</span></span><span> <span>return $this->updatedAt;
</span></span><span> <span>}
</span></span><span>
</span><span> <span>/**
</span></span><span><span> * Set updatedAt
</span></span><span><span> *
</span></span><span><span> * <span>@param datetime $updatedAt
</span></span></span><span><span> */
</span></span><span> <span>public function setUpdatedAt($updatedAt)
</span></span><span> <span>{
</span></span><span> <span>$this->updatedAt = $updatedAt;
</span></span><span>
</span><span> <span>return $this;
</span></span><span> <span>}
</span></span><span><span>}</span></span>
로그인 후 복사
교리 단체의 특성은 여러 상속을 지원하지 않는 PHP와 같은 언어로 코드를 재사용하는 방법을 제공합니다. 추가 기능을 제공하기 위해 다른 클래스에 삽입 할 수있는 재사용 가능한 코드 스 니펫을 만들 수 있습니다. 이로 인해 여러 클래스에서 코드를 복제하는 것을 피할 수 있으므로 클리너가 클리너, 유지 관리 가능한 코드로 이어질 수 있습니다. 특성은 또한 사용 된 클래스의 방법을 무시하는 데 사용될 수 있으며, 유연한 방식으로 동작을 수정하기위한 강력한 도구를 제공합니다.
위 내용은 교리 단체에서 특성을 사용합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!