PHP 클래스의 상속 사용 예에 ​​대한 자세한 설명

伊谢尔伦
풀어 주다: 2023-03-12 07:40:01
원래의
1396명이 탐색했습니다.

PHP에서는 공유 메서드로 클래스를 작성한 다음 하위 클래스를 상속하여 해당 기능을 가져오는 경우가 많습니다. 대략 다음과 같은 상위 클래스가 있다고 가정합니다:

<?php
class Father{

    public function construct(){
        echo &#39;我是父类的构造方法!&#39;;
    }

    protected function say($str = &#39;Hello World!&#39;){
        echo &#39;说了一句话:&#39; . $str;
    }
}
?>
로그인 후 복사

그런 다음 이를 상속할 하위 클래스를 만듭니다:

<?php

class chirld extends Father{

    public construct(){
        echo &#39;我是子类的构造方法~&#39;;
    }
}
로그인 후 복사

이때 하위 클래스를 인스턴스화하면 결과는 다음과 같습니다. 나는 하위 클래스의 생성자입니다~ < /코드>! <br/>물론 <code>상속 관계로 인해 하위 클래스는 상위 클래스의 say() 메서드를 호출할 수 있습니다. 我是子类的构造方法~
当然,因为继承关系,所以子类是可以调用父类的say()方法的。

如果你想实现父类的构造方法,然而你又想实现子类的构造方法,你可以这样子去做:

<?php

class chirld extends Father{

    public construct(){
        parent::construct();
        echo &#39;我是子类的构造方法~&#39;;
    }
}

?>
로그인 후 복사

这时候就会输出我是父类的构造方法!我是子类的构造方法~

假设你在子类中定义了这么一个方法:

protected function say($str = &#39;&#39;){
   echo &#39;我是子类的say&#39;;
}
로그인 후 복사

那么,你此时从父类继承下来的sys()方法将会被重写,所以调用后输出的结果就是:我是子类的say

如果你这样定义会怎样?

public function say($str = &#39;&#39;){
     echo &#39;我是子类的方法哦~&#39;;
}
로그인 후 복사

这样的写法还是可以的。PHP跟其他强类型语言不同的地方是,PHP重写方法允许你对重写的方法”向上公有化”,而不允许你”向下私有化”,就比如在这里你定义为private是肯定会报错的,而像C++这样语言确恰恰相反。

PHP的对于这种情况的思想就是,你父亲给了你受保护级别的遗产,此时在你手上是保护级别的,你父亲允许你对对别人分享,也就是public,但不允许你自己藏起来,也就是private,自己独吞肯定不行的。

此时你肯定会问,那么父类的say()设置为private会怎样?
结果不会怎样,就是父类已经私有化了,子类根本继承不到,所以你在子类中的say()方法随你这么定都可以。

还有一个问题,就是父类已经定义了sys()中带可选参数,那么,在子类中的你像下面这样无参数定义会怎样呢?

public function say(){
    echo &#39;哈哈。我没有参数了耶~&#39;;
}
로그인 후 복사

结果还是可以正常运行的,只不过会有 E_STRICT

부모 클래스의 생성자를 구현하고 싶지만 하위 클래스의 생성자도 구현하고 싶다면 다음과 같이 하면 됩니다. 🎜rrreee🎜이때 나는 부모 클래스의 생성자입니다. 클래스! 및 <code>나는 하위 클래스의 생성자입니다~. 🎜🎜하위 클래스에 다음과 같은 메서드를 정의한다고 가정해 보겠습니다. 🎜rrreee🎜그런 다음 상위 클래스에서 상속한 sys() 메서드가 다시 작성되므로 호출 후의 출력 결과는 다음과 같습니다. >나는 하위 클래스의 대표자입니다. 🎜🎜이렇게 정의하면 어떻게 될까요? 🎜rrreee🎜이런 글쓰기는 그래도 괜찮아요. PHP와 다른 강력한 형식의 언어의 차이점은 PHP 재정의 메서드를 사용하면 재정의된 메서드를 "상향으로 공개"할 수 있지만 "하향으로 개인화"할 수는 없다는 것입니다. 예를 들어 여기서는 로 정의합니다. private 는 확실히 오류를 보고하지만 C++와 같은 언어는 정반대입니다. 🎜🎜이 상황에 대한 PHP의 생각은 당신의 아버지가 당신에게 보호 수준의 상속을 주었다는 것입니다. 당신의 아버지는 당신이 그것을 다른 사람과 공유하도록 허용합니다, 즉 . 공개이지만 직접 숨길 수는 없습니다. 즉, <code>비공개로 모든 것을 숨길 수는 없습니다. 🎜🎜이 시점에서 확실히 물어보실 점은, 상위 클래스의 say()private으로 설정되면 어떻게 될까요?
결과는 아무 것도 아닐 것입니다. 즉, 상위 클래스가 사유화되어 하위 클래스가 이를 전혀 상속받을 수 없으므로 하위 클래스의 say() 메서드를 다음과 같이 결정할 수 있습니다. 당신은 좋아합니다. 🎜🎜또 다른 문제가 있습니다. 즉, 상위 클래스가 이미 선택적 매개변수로 sys()를 정의했다는 것입니다. 그렇다면 다음과 같이 매개변수 없이 하위 클래스에 정의하면 어떻게 될까요? 🎜rrreee🎜결과는 여전히 정상적으로 실행될 수 있지만 E_STRICT 수준 프롬프트가 표시됩니다. 그 이유는 PHP 표준에서는 매개변수의 개수가 상위 클래스에 맞춰져야 하기 때문입니다. 물론 오류 수준은 php.ini에서 설정할 수 있습니다. 🎜

위 내용은 PHP 클래스의 상속 사용 예에 ​​대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!