PHP에서는 공유 메서드로 클래스를 작성한 다음 하위 클래스를 상속하여 해당 기능을 가져오는 경우가 많습니다. 대략 다음과 같은 상위 클래스가 있다고 가정합니다:
<?php class Father{ public function construct(){ echo '我是父类的构造方法!'; } protected function say($str = 'Hello World!'){ echo '说了一句话:' . $str; } } ?>
그런 다음 이를 상속할 하위 클래스를 만듭니다:
<?php class chirld extends Father{ public construct(){ echo '我是子类的构造方法~'; } }
이때 하위 클래스를 인스턴스화하면 결과는 다음과 같습니다. 나는 하위 클래스의 생성자입니다~ < /코드>! <br/>물론 <code>상속
관계로 인해 하위 클래스는 상위 클래스의 say()
메서드를 호출할 수 있습니다. 我是子类的构造方法~
!
当然,因为继承
关系,所以子类是可以调用父类的say()
方法的。
如果你想实现父类的构造方法,然而你又想实现子类的构造方法,你可以这样子去做:
<?php class chirld extends Father{ public construct(){ parent::construct(); echo '我是子类的构造方法~'; } } ?>
这时候就会输出我是父类的构造方法!
和我是子类的构造方法~
。
假设你在子类中定义了这么一个方法:
protected function say($str = ''){ echo '我是子类的say'; }
那么,你此时从父类继承下来的sys()
方法将会被重写,所以调用后输出的结果就是:我是子类的say
。
如果你这样定义会怎样?
public function say($str = ''){ echo '我是子类的方法哦~'; }
这样的写法还是可以的。PHP跟其他强类型语言不同的地方是,PHP重写方法允许你对重写的方法”向上公有化”,而不允许你”向下私有化”,就比如在这里你定义为private
是肯定会报错的,而像C++这样语言确恰恰相反。
PHP的对于这种情况的思想就是,你父亲给了你受保护级别的遗产,此时在你手上是保护级别的,你父亲允许你对对别人分享,也就是public
,但不允许你自己藏起来,也就是private
,自己独吞肯定不行的。
此时你肯定会问,那么父类的say()
设置为private
会怎样?
结果不会怎样,就是父类已经私有化了,子类根本继承不到,所以你在子类中的say()
方法随你这么定都可以。
还有一个问题,就是父类已经定义了sys()
中带可选参数,那么,在子类中的你像下面这样无参数定义会怎样呢?
public function say(){ echo '哈哈。我没有参数了耶~'; }
结果还是可以正常运行的,只不过会有 E_STRICT
나는 부모 클래스의 생성자입니다. 클래스! 및 <code>나는 하위 클래스의 생성자입니다~
. 🎜🎜하위 클래스에 다음과 같은 메서드를 정의한다고 가정해 보겠습니다. 🎜rrreee🎜그런 다음 상위 클래스에서 상속한 sys()
메서드가 다시 작성되므로 호출 후의 출력 결과는 다음과 같습니다. >나는 하위 클래스의 대표자입니다. 🎜🎜이렇게 정의하면 어떻게 될까요? 🎜rrreee🎜이런 글쓰기는 그래도 괜찮아요. PHP와 다른 강력한 형식의 언어의 차이점은 PHP 재정의 메서드를 사용하면 재정의된 메서드를 "상향으로 공개"할 수 있지만 "하향으로 개인화"할 수는 없다는 것입니다. 예를 들어 여기서는 로 정의합니다. private
는 확실히 오류를 보고하지만 C++와 같은 언어는 정반대입니다. 🎜🎜이 상황에 대한 PHP의 생각은 당신의 아버지가 당신에게 보호 수준의 상속을 주었다는 것입니다. 당신의 아버지는 당신이 그것을 다른 사람과 공유하도록 허용합니다, 즉 . 공개이지만 직접 숨길 수는 없습니다. 즉, <code>비공개
로 모든 것을 숨길 수는 없습니다. 🎜🎜이 시점에서 확실히 물어보실 점은, 상위 클래스의 say()
가 private
으로 설정되면 어떻게 될까요? say()
메서드를 다음과 같이 결정할 수 있습니다. 당신은 좋아합니다. 🎜🎜또 다른 문제가 있습니다. 즉, 상위 클래스가 이미 선택적 매개변수로 sys()
를 정의했다는 것입니다. 그렇다면 다음과 같이 매개변수 없이 하위 클래스에 정의하면 어떻게 될까요? 🎜rrreee🎜결과는 여전히 정상적으로 실행될 수 있지만 E_STRICT
수준 프롬프트가 표시됩니다. 그 이유는 PHP 표준에서는 매개변수의 개수가 상위 클래스에 맞춰져야 하기 때문입니다. 물론 오류 수준은 php.ini에서 설정할 수 있습니다. 🎜위 내용은 PHP 클래스의 상속 사용 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!