>  기사  >  백엔드 개발  >  PHP는 여러 상위 클래스로부터 상속받을 수 있나요?

PHP는 여러 상위 클래스로부터 상속받을 수 있나요?

(*-*)浩
(*-*)浩원래의
2019-09-28 11:21:244707검색

PHP에는 다중 상속 기능이 없습니다. 다중 상속을 지원하는 프로그래밍 언어에서도 이 기능을 거의 사용하지 않습니다. 대부분의 사람들은 다중 상속이 좋은 설계 방법이 아니라고 생각합니다.

PHP는 여러 상위 클래스로부터 상속받을 수 있나요?

그런데 개발에서 다중 상속을 사용한다면 어떻게 해야 할까요?

다음은 PHP에서 다중 상속을 구현하기 위해 특성을 사용하는 문제를 소개합니다. (추천 학습: PHP 비디오 튜토리얼)

PHP5.4부터 PHP는 코드 재사용을 위해 메소드 특성 구문을 구현했습니다.

Trait는 PHP의 단일 상속 언어를 위해 준비된 코드 재사용 메커니즘입니다. 단일 상속의 한계를 줄이기 위해 다양한 구조적 수준에서 메서드를 재사용하는 메서드가 개발되었습니다. 특성 및 클래스 조합의 의미는 복잡성을 줄이고 기존 다중 상속 및 Mixin 클래스와 관련된 일반적인 문제를 방지하는 방법을 정의합니다.

需要注意的是,从基类继承的成员会被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。

먼저 예를 들어보겠습니다:

trait TestOne{

    public function test()
    {
        echo "This is trait one <br/>";
    }

}

trait TestTwo{

    public function test()
    {
        echo "This is trait two <br/>";
    }


    public function testTwoDemo()
    {
        echo "This is trait two_1";
    }

}

class BasicTest{

    public function test(){
        echo "hello world\n";
    }

}


class MyCode extends BasicTest{

    //如果单纯的直接引入,两个类中出现相同的方法php会报出错
    //Trait method test has not been applied, because there are collisions with other trait 
    //methods on MyCode 
    //use TestOne,TestTwo;
    //怎么处理上面所出现的错误呢,我们只需使用insteadof关键字来解决方法的冲突
    use TestOne,TestTwo{
        TestTwo::test insteadof TestOne;
    }

}


$test = new MyCode();
$test->test();
$test->testTwoDemo();

실행 결과:

This is trait two 
This is trait two_1

위 내용은 PHP는 여러 상위 클래스로부터 상속받을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.