이 글은 주로 PHP에서 시뮬레이션 다중 상속을 구현하는 방법을 소개합니다. 이제는 모든 사람과 공유합니다. 도움이 필요한 친구들은 이를 참조할 수 있습니다.
__call이라는 마법의 메서드가 있습니다. 존재하지 않는 메소드를 호출하면 이 메소드가 자동으로 호출됩니다. 이 시점에서 호출을 기존 메서드로 리디렉션할 수 있는 기회가 있습니다. 여러 부모 클래스를 상속받은 하위 클래스의 경우 메서드를 찾는 과정은 일반적으로 다음과 같습니다.
자신의 메서드 -> 부모 클래스 1의 메서드 -> 부모 클래스 2의 메서드...시뮬레이션 프로세스는 대략 다음과 같습니다.각 상위 클래스를 인스턴스화한 다음 이를 하위 클래스의 속성으로 사용합니다. 이러한 상위 클래스는 일부 공개 메소드를 제공합니다. 하위 클래스에 메서드가 있으면 __call() 함수가 호출되지 않습니다. 이는 상위 클래스의 메서드를 "재정의"하는 것과 같습니다. 존재하지 않는 메소드가 호출되면 __call() 메소드를 사용하여 상위 클래스에서 차례로 호출할 수 있는 메소드를 찾습니다. 이것이 완전한 다중 상속은 아니지만 문제를 해결하는 데 도움이 될 수 있습니다.
1 <?php 2 class Parent1 { 3 function method1() {} 4 function method2() {} 5 } 6 class Parent2 { 7 function method3() {} 8 function method4() {} 9 } 10 class Child { 11 protected $_parents = array(); 12 public function Child(array $parents=array()) { 13 $_parents = $parents; 14 } 15 16 public function __call($method, $args) { 17 // 从“父类"中查找方法 18 foreach ($this->_parents as $p) { 19 if (is_callable(array($p, $method))) { 20 return call_user_func_array(array($p, $method), $args); 21 } 22 } 23 // 恢复默认的行为,会引发一个方法不存在的致命错误 24 return call_user_func_array(array($this, $method), $args); 25 } 26 } 27 $obj = new Child(array(new Parent1(), new Parent2())); 28 $obj->method1(); 29 $obj->method3();
인터페이스는 다중 상속을 구현할 수 있으며 하나 이상의 인터페이스를 상속할 수 있습니다. 물론, 인터페이스 상속도 확장 키워드를 사용합니다. 여러 인터페이스를 상속하려면 상속된 인터페이스를 쉼표로 구분하면 됩니다. 인터페이스가 다른 인터페이스를 상속하는 경우 상위 인터페이스의 정적 상수 속성과 추상 메서드
를 직접 상속하므로 클래스는 인터페이스를 구현할 때 관련된 모든 추상 메서드 를 구현해야 합니다. 이제 PHP 인터페이스 상속에 대해 어느 정도 이해하셨습니다. 다음 예제는 참조용입니다.
<?php interface father{ function shuchu(); } interface fam extends father{ function cook($name); } class test implements fam{ function shuchu(){ echo "接口继承,要实现两个抽象方法"; echo "<br>"; } function cook($name){ echo "平时经常做饭的人是:".$name; } } $t=new test(); $t->shuchu(); $t->cook("妈妈"); ?>
<?php interface father{ function shuchu(); } interface mother{ function dayin($my); } interface fam extends father,mother{ function cook($name); } class test implements fam{ function dayin($my){ echo "我的名字是:".$my; echo "<br>"; } function shuchu(){ echo "接口继承,要实现两个抽象方法"; echo "<br>"; } function cook($name){ echo "平时经常做饭的人是:".$name; } } $t=new test(); $t->shuchu(); $t->dayin("小强"); $t->cook("妈妈"); ?>
|
PHP prepare에서 mysqli 전처리
위 내용은 PHP에서 다중 상속을 시뮬레이션하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!