코어 포인트
PHP 5.4에 도입 된 특성 메커니즘은 독립 상속 계층 클래스 간의 코드 재사용을 허용하여 단일 상속의 한계를 해결하고 코드 복제를 줄일 수 있습니다.
insteadof
as
두 클래스 모두 싱글 톤을 만드는 것과 같은 일반적인 기능이 필요한 경우 문제가됩니다. PHP는 다중 상속을 지원하지 않기 때문에 각 클래스는 싱글 톤 패턴을 지원하는 필요한 코드를 구현하거나 무의미한 상속 계층이 있어야합니다. 특성은 이러한 유형의 문제에 대한 해결책을 제공합니다. <code class="language-php"><?php class DbReader extends Mysqli { } class FileReader extends SplFileObject { }</code>
가 $a
의 대상이고 DbReader
는 의 대상이지만 이제는 모두 싱글 톤으로 나타납니다. 싱글 톤의 방법은 그것을 사용하는 클래스에 수평으로 주입되었습니다. 특성은 수업에 추가 의미를 부과하지 않습니다. 어느 정도까지, 당신은 그것을 특성의 메소드가 복합 클래스로 복사되는 컴파일러 보조 카피-페이스트 메커니즘으로 생각할 수 있습니다. 개인 클래스에서 개인 클래스에서 $b
속성이있는 를 서브 클래스 만 있으면 속성은 FileReader
의 덤프에 표시되지 않습니다. 그러나 특성으로 거기에 있습니다! $instance
DbReader
다중 특성 ReflectionClass::export()
<code class="language-php"><?php trait Singleton { private static $instance; public static function getInstance() { if (!(self::$instance instanceof self)) { self::$instance = new self; } return self::$instance; } } class DbReader extends ArrayObject { use Singleton; } class FileReader { use Singleton; }</code>
를 적용하여 객체 가이 두 특성의 메소드를 갖고 "Hello World"라고 말할 수 있습니다. 특성으로 구성된 특성
여기서
<code class="language-php"><?php $a = DbReader::getInstance(); $b = FileReader::getInstance(); var_dump($a); //object(DbReader) var_dump($b); //object(FileReader)</code>특성을 사용하여 에 포함시켰다. 특성에는 다른 두 가지 특성의 방법이 있기 때문에, 우리 가이 두 가지 특성을 수업에 포함시키는 것과 정확히 동일합니다.
Hello
(공간 제한과 보유 된 핵심 정보로 인해 다음 내용이 간단히 요약됩니다)
우선 순위 순서 : World
특성 메소드는 상위 클래스 메소드보다 우선 순위가 높으며 클래스 메소드는 특성 메소드보다 우선 순위가 높습니다. Hello
충돌 해결 및 별칭 : World
MyWorld
를 사용하여 사용할 특성 메소드를 선택하고 Hello
를 사용하여 충돌을 피하기 위해 메소드 별명을 만듭니다. World
반사 : MyWorld
는 ,
및 와 같은 클래스에서 특성 정보를 얻는 방법을 제공합니다. 다른 특징 :
는 결합 된 클래스의 개인 속성과 방법에 액세스 할 수 있으며, 그 반대는 이러한 방법을 구현해야합니다.요약 :
(FAQS 부분은 기사의 길이로 인해 여기서 생략됩니다. 핵심 정보는 위 내용에서 다루었습니다.) .
위 내용은 PHP 5.4의 특성 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!