>  기사  >  백엔드 개발  >  PHP 클래스의 개인 속성 상속 문제에 대한 자세한 설명

PHP 클래스의 개인 속성 상속 문제에 대한 자세한 설명

WBOY
WBOY원래의
2016-07-25 09:03:46929검색
  1. 클래스 직원{

  2. 비공개 $sal=3000;
  3. //protected $sal=3000 ;
  4. 공용 함수 getSal(){
  5. return $this->sal;
  6. }
  7. }
  8. 클래스 관리자가 직원을 확장합니다. {
  9. protected $sal=5000;
  10. public function getParentSal(){

  11. //여기에 반환되는 것은 상위 클래스의 비공개 속성입니다.
  12. return parent::getSal();
  13. }
  14. }
  15. $manager = new Manager();
  16. echo "PHP ".phpversion()."
    ";
  17. echo $manager->getSal();
  18. echo "< ;br> ";
  19. echo "부모의 $sal ".$manager->getParentSal();
  20. ?>

코드 복사

프로그램 실행 결과: PHP 5.3.8 3000 부모님 월급 3000

상위 클래스의 속성이 하위 클래스에 의해 재정의되는 경우. 결과는 이것입니다. 5행의 속성 정의는 보호됩니다.

  1. 반 직원{

  2. //private $sal=3000;
  3. protected $ sal=3000;
  4. 공용 함수 getSal(){
  5. return $this->sal;
  6. }
  7. }

  8. class Manager가 직원 확장 {

  9. protected $sal=5000;

  10. public function getParentSal(){

  11. //여기에 반환되는 것은 상위 클래스의 비공개 속성입니다.
  12. 부모 반환: :getSal( );
  13. }
  14. }
  15. $manager = new Manager();
  16. echo "PHP ".phpversion()."
    ";
  17. echo $manager- >getSal ();
  18. echo "
    ";
  19. echo "부모의 $sal ".$manager->getParentSal();
  20. ?>

코드 복사

프로그램 실행 결과: PHP 5.3.8 5000 부모님 월급 5000

첫 번째 열에 있는 상위 클래스의 프라이빗 $sal은 다시 작성되지 않았으므로 상위 클래스 메서드 $manager->getSal()은 상위 클래스의 자체 프라이빗 속성인 $sal을 호출합니다. 기억 속에 있어요. 두 번째 열에서는 부모 클래스의 보호된 $sal이 재정의되었습니다. 이 부모 클래스의 $manager->getSal() 메서드는 재정의된 $sal을 호출합니다. 시간은 $sal 뿐입니다. 다음 세 번째 예를 살펴보겠습니다. 하위 클래스에서 재정의된 메서드는 현재 비공개 클래스에 유효합니다.

  1. 클래스 직원{

  2. private $sal=3000;
  3. public 함수 getSal( ){
  4. return $this->sal;
  5. }
  6. }

  7. class Manager가 직원을 확장합니다. {

  8. private $sal=5000;
  9. //재작성된 메소드
  10. public function getSal(){
  11. return $this->sal;
  12. }
  13. public function getParentSal(){
  14. //여기서 반환되는 것은 상위 Private입니다. 클래스 속성.
  15. return parent::getSal();
  16. }
  17. }
  18. $manager = new Manager();
  19. echo "PHP ".phpversion()."< br>";
  20. echo $manager->getSal();
  21. echo "
    ";
  22. echo "parent's $sal ".$manager->getParentSal();
  23. ?>

코드 복사

결과 실행 PHP 5.3.8 5000 부모님 월급 3000

이 예에서 하위 클래스는 getSal() 메서드를 재정의하므로 이 클래스가 호출하는 것은 하위 클래스의 속성입니다. 이 하위 클래스 줄에 주석을 달면 //비공개 $sal=5000; 다음과 같은 오류를 발견하게 될 것입니다: 주의: 정의되지 않은 속성: Manager::$sal in E:wampwwwoo2-52-5-3.php on line 14 12행에서 하위 클래스 다시 쓰기 메서드를 주석 처리하면 echo $manager->getSal();의 결과는 상위 클래스 3000

의 비공개 속성 $sal입니다.

zend 디버깅 상태를 열어 메모리에서 무슨 일이 일어나고 있는지 확인하세요. 맨 아래에 $sal이 2개 있다는 점에 유의하세요. 각각 3000과 5000입니다.

  1. 클래스 직원{
  2. private $sal=3000;
  3. public function getSal(){
  4. return $ this->sal;
  5. }
  6. }
  7. class Manager는 직원을 확장합니다. {
  8. protected $sal=5000;
  9. public function getParentSal(){
  10. return $this->sal ;
  11. }
  12. }
  13. $manager = new Manager();
  14. echo "PHP ".phpversion()."
    ";
  15. echo $manager->getSal( );
  16. ?>
코드 복사

프로그램 실행 결과: PHP 5.3.8 3000

상위 클래스의 $sal 속성을 protected로 변경하면 하위 클래스가 상위 클래스의 속성을 재정의합니다. 메모리에는 $sal이 하나만 있습니다.

  1. 클래스 직원{
  2. protected $sal=3000;
  3. public function getSal(){
  4. return $ this->sal;
  5. }
  6. }
  7. class Manager는 직원을 확장합니다. {
  8. protected $sal=5000;
  9. public function getParentSal(){
  10. return $this->sal ;
  11. }
  12. }
  13. $manager = new Manager();
  14. echo "PHP ".phpversion()."
    ";
  15. echo $manager->getSal( );
  16. ?>
코드 복사

프로그램 실행 결과: PHP 5.3.8 5000 참고: PHP5는 parent-> 대신 parent::를 사용하여 부모 클래스를 호출합니다. 이는 PHP5가 부모 클래스가 메모리에 생성되는 것을 원하지 않는다는 것을 보여주기에 충분합니다. PHP5는 Java보다 상속을 더 간단하게 만들고 싶어합니다.



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