이 글은 주로 PHP의 특성 분석을 소개하는데, 이는 어느 정도 참고할만한 가치가 있습니다. 이제 도움이 필요한 친구들이 참고할 수 있도록 하겠습니다.
PHP 5.4.0부터 특성이라는 코드 재사용 방법을 구현합니다.
Trait는 말 그대로 "특성"과 "특성"을 의미합니다. Trait 키워드를 사용하면 PHP의 클래스에 새로운 특성을 추가할 수 있다는 것을 이해할 수 있습니다.
Trait는 PHP와 같은 단일 상속 언어를 위해 준비된 코드 재사용 메커니즘입니다. 특성은 단일 상속 언어의 제한을 줄이고 개발자가 다양한 계층 내의 독립 클래스에서 메서드를 자유롭게 재사용할 수 있도록 설계되었습니다. 특성 및 클래스 구성의 의미는 복잡성을 줄이고 기존 다중 상속 및 Mixin 클래스와 관련된 일반적인 문제를 방지하는 방법을 정의합니다.
Trait는 클래스와 유사하지만 기능을 세밀하고 일관된 방식으로 결합하도록 설계되었습니다. 특성 자체를 통해 인스턴스화할 수 없습니다. 이는 전통적인 상속에 수평적 기능의 조합을 추가합니다. 즉, 애플리케이션의 여러 클래스 간에 상속이 필요하지 않습니다.
Usage: 클래스에서 use 키워드를 사용하여 결합할 Trait 이름을 선언합니다. 특정 Trait 선언은 Trait 키워드를 사용하여 인스턴스화할 수 없습니다.
1. 특성 기본
<?php header("Content-type:text/html;charset=utf-8"); trait Test{public function hello1(){ return "Test::hello1()"; } }class demo1{ use Test; }$obj = new demo1();echo $obj->hello1().'<br />';//Test::hello1()
2. 우선순위
# 🎜 🎜#
<?php class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } }class MyHelloWorld extends Base { use SayWorld; }$o = new MyHelloWorld();$o->sayHello();//Hello World!
<?php trait HelloWorld { public function sayHello() { echo 'Hello World!'; } }class TheWorldIsNotEnough { use HelloWorld; public function sayHello() { echo 'Hello Universe!'; } } $o = new TheWorldIsNotEnough(); $o->sayHello();//Hello Universe!
<?php trait Hello { public function sayHello() { echo 'Hello '.'<br />'; } } trait World { public function sayWorld() { echo 'World'.'<br />'; } }class MyHelloWorld { use Hello, World; public function sayExclamationMark() { echo '!'.'<br />'; } }$o = new MyHelloWorld();$o->sayHello();//Hello$o->sayWorld();//World$o->sayExclamationMark();//!
insteadof 연산자를 사용하여 사용할 충돌 방법을 명시적으로 지정해야 합니다.
<?php trait A{ public function smallTalk(){ echo 'a'; } public function bigTalk(){ echo 'A'; } } trait B{ public function smallTalk(){ echo 'b'; } public function bigTalk(){ echo 'B'; } }class Talker{ use A,B{ B::smallTalk insteadof A; A::bigTalk insteadof B; } }$obj = new Talker();$obj->smallTalk();//b$obj->bigTalk();//A
as 연산자는 특정일 수 있습니다. 메소드 별칭을 소개합니다. as 연산자는 메서드 이름을 바꾸거나 해당 메서드에 영향을 주지 않습니다.
<?php trait A{ public function smallTalk(){ echo 'a'; } public function bigTalk(){ echo 'A'; } } trait B{ public function smallTalk(){ echo 'b'; } public function bigTalk(){ echo 'B'; } }class Talker{ use A,B{ B::smallTalk insteadof A; A::bigTalk insteadof B; B::bigTalk as b_bigTalk; A::smallTalk as a_smallTalk; } }$obj = new Talker();$obj->smallTalk();//b$obj->bigTalk();//A$obj->b_bigTalk();//B$obj->a_smallTalk();//a
as#🎜 🎜# 구문을 사용하여 메소드에 대한 액세스 제어를 조정할 수도 있습니다.
<?php trait A{ private function smallTalk(){ echo 'a'; } }class Talker{ use A{ smallTalk as public aaa; } }$obj = new Talker();$obj->aaa();//a
6. 특성 그룹
클래스가 특성을 사용할 수 있듯이 다른 특성도 특성을 사용할 수 있습니다. . 특성을 정의할 때 하나 이상의 특성을 사용하면 다른 특성의 일부 또는 전체 구성원을 결합할 수 있습니다.
<?php trait Hello{ public function sayHello(){ echo 'Hello '; } } trait World{ public function sayWorld(){ echo 'World !'; } } trait HelloWorld{ use Hello,World; }class Talker{ use HelloWorld; }$obj = new Talker();$obj->sayHello();//Hello$obj->sayWorld();//World !
7.추상 멤버
사용되는 클래스에 필수 요구 사항을 부과하기 위해 특성이 지원됩니다. 추상적인 사용 방법.
<?php trait Hello{ public function sayWorld(){ echo 'Hello '.$this->getWorld(); } abstract public function getWorld(); }class Talker{ private $world; use Hello; public function getWorld(){ return $this->world; } public function setWorld($val){ $this->world = $val; } }$obj = new Talker();$obj->setWorld("Trait !");$obj->sayWorld();//Hello Trait !
8 특성 정적 멤버
Traits는 정적 멤버 정적 메서드로 정의할 수 있습니다.
<?php trait HelloWorld{ public static function sayHelloWorld(){ echo 'Hello World !'; } }class Talker{ use HelloWorld; } Talker::sayHelloWorld();//Hello World !
<?php trait Counter{ public function inc(){ static $c = 0; $c++; echo "$c\n"; } }class C1{ use Counter; }class C2{ use Counter; }$c1 = new C1();$c1->inc();//1$c1_1 = new C1();$c1_1->inc();//2$c2 = new C2();$c2->inc();//1
9, 속성
# 🎜🎜#Trait는 속성을 정의할 수도 있습니다.<?php trait PropertiesTrait { public $x = 1; }class PropertiesExample { use PropertiesTrait; }$example = new PropertiesExample;echo $example->x;//1
PHP에서 Elasticsearch를 사용하는 방법
위 내용은 PHP의 특성 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!