이 글의 내용은 PHP의 특성이 무엇인지에 관한 것입니다. PHP의 특성에 대한 간략한 소개는 특정 참조 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
특성이란 무엇인가요?
PHP 공식 홈페이지 소개를 보세요.
PHP 5.4.0부터 PHP는 특성이라는 코드 재사용 방법을 구현합니다.
Trait는 PHP와 같은 단일 상속 언어를 위해 준비된 코드 재사용 메커니즘입니다. 특성은 단일 상속 언어의 제한을 줄이고 개발자가 다양한 계층 내의 독립 클래스에서 메서드를 자유롭게 재사용할 수 있도록 설계되었습니다. 특성 및 클래스 구성의 의미는 복잡성을 줄이고 기존 다중 상속 및 Mixin 클래스와 관련된 일반적인 문제를 방지하는 방법을 정의합니다.
특성은 클래스와 유사하지만 기능을 세밀하고 일관된 방식으로 결합하도록 설계되었습니다. 특성 자체를 통해 인스턴스화할 수 없습니다. 이는 전통적인 상속에 수평적 기능의 조합을 추가합니다. 즉, 애플리케이션의 여러 클래스 간에 상속이 필요하지 않습니다.
예시 1
휴대폰과 자동차 모두 GPS 기능을 가지고 있어 위치 확인을 위해 GPS를 사용하므로 기능이 통일되어야 합니다. 휴대폰과 자동차는 기본적으로 GPS 기능 외에는 공통점이 없으므로 상속을 사용할 수 없습니다. 인터페이스에 관해서는 서로 다른 클래스가 인터페이스를 구현할 때 인터페이스의 구현도 다를 수 있지만 GPS의 기능은 위치 확인을 위한 것이라고 생각합니다. 따라서 클래스와 인터페이스 대신 특성을 사용하십시오. 이것은 내 이해이며 올바른지 모르겠습니다.
gps.php의 정의:
<?php trait Gps { public function gps() { echo 'i can gps'; } }
는 특성을 사용하여 재사용을 위한 GPS 특성을 정의하며 해당 키워드는 trait 입니다. 그런 다음 car.php 및 mobile.php에서 참조하십시오.
car.php 정의:
class Car { use gps; public function move() { echo 'i can move'; } }
mobile.php 정의:
<?php class Mobile { use gps; public function tel() { echo 'i can tel'; } }
car.php 및 mobile.php에서 use 키워드를 사용하여 GPS 특성을 도입하면 자동차 및 모바일에서 GPS를 호출할 수 있습니다. () 이 방법.
test.php 테스트용:
<?php require_once('gps.php'); require_once('car.php'); require_once('mobile.php'); $car = new Car(); $mobile = new Mobile(); $car->gps(); echo "\n"; $mobile->gps();
출력 결과는 다음과 같습니다.
1 i can gps 2 i can gps
예제 2
또 다른 국산 GPS가 자동차에 도입되었습니다.
gpschina.php는 다음과 같이 정의됩니다.
<?php trait GpsChina { public function gps() { echo 'i can chinae gps'; } }
자동차에 도입되었으며 car.php의 정의를 다음과 같이 수정합니다.
<?php class Car { use gps, gpschina; public function move() { echo 'i can move'; } }
테스트를 위해 test.php를 다시 호출하면 다음과 같이 오류가 보고됩니다.
1 Fatal error: Trait method gps has not been applied, because there are collisions with other trait methods on Car in Car.php on line 4
소개에서 특성에서 gps와 gpschina는 각각 GPS를 가지고 있기 때문에 $car->gps()를 직접 사용하는 경우에는 gps의 gps() 메서드인지 GPS() 메서드인지 판단할 수 없습니다. gpschina를 사용하므로 오류가 보고됩니다. 이 경우 하나를 식별해야 합니다. car.php 파일을 수정합니다.
<?php class Car { use gps, gpschina { GpsChina::gps insteadof Gps; } public function move() { echo 'i can move'; } }
이런 식으로 GpsChina::gps 메서드를 사용하여 test.php를 호출하여 확인합니다.
1 i can chinae gps 2 i can gps
이런 식으로 gpschina의 gps() 메서드는 $car->gps() 다음에 호출됩니다.
예제 3
Car 클래스 자체에 gps() 메소드가 있다면 어떨까요? Car 클래스를 수정합니다.
<?php class Car { use gps, gpschina { GpsChina::gps insteadof Gps; } public function gps() { echo 'car::gps'; } public function move() { echo 'i can move'; } }
test.php를 호출하여 결과를 확인합니다.
1 car::gps 2 i can gps
Car 클래스 자체의 gps() 메서드가 호출되는 것을 볼 수 있습니다.
클래스에 부모 클래스에서 상속받은 메서드, 특성을 도입하는 사용 메서드와 클래스 자체의 메서드 이름이 같은 경우 메서드가 없으면 자신의 클래스의 메서드가 먼저 호출됩니다. 자신의 클래스에서 특성을 도입하는 사용 방법이 호출됩니다. 처음 두 가지를 사용할 수 없으면 상위 클래스에서 상속된 방법이 호출됩니다.
관련 추천:
특성이란 무엇인가요? PHP에서 Trait의 선언 및 사용 팁 공유
위 내용은 PHP에서 특성은 무엇을 의미합니까? PHP의 특성에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!