찾다
백엔드 개발PHP7또 다른 기회가 있다면 재정의를 다시 작성하는 것이 탈출구입니다.

정의 : 재정의, 즉 상위 클래스와 동일한 이름을 가진 멤버가 하위 클래스에 정의됩니다. 하위 클래스는 상위 클래스의 모든 클래스 멤버를 재정의할 수 있습니다. 일반적으로 재정의는 상위 클래스의 메서드를 재정의하는 데 사용됩니다. . 일부 비즈니스 로직을 확장하거나 변경하는 데 사용됩니다.

1. 공개 속성이든 보호 속성이든 일단 재정의되면 상위 클래스의 속성은 존재하지 않습니다. 덮어쓰기로 인해 개인 속성이 손실되지 않습니다. 受保护属性,一旦重写父类的属性就会不存在,而私有属性不会因为被覆盖而丢失。

<?php
    class A{
      
        public $name=&#39;张三&#39;;
        protected $sex=&#39;man&#39;;
        private  $age=&#39;25&#39;;

        public function getName(){
           echo __CLASS__,&#39;<br/>&#39;;
           echo $this->name."<br>";
        }
        protected function getSex(){
            echo __CLASS__,&#39;<br/>&#39;;
            echo $this->sex."<br>";
        }
        private function getAge(){
            echo __CLASS__,&#39;<br/>&#39;;
            echo $this->age."<br>";
        }

    }
    class B extends A{
        
        public $name=&#39;王五&#39;;
        protected $sex=&#39;woman&#39;;
        private  $age=&#39;26&#39;;
    
        
        public function getAll(){
            echo $this->name."<br>";
            echo $this->sex."<br>";
            echo $this->age."<br>";
        }
    }

    $a=new B();
    var_dump($a);
    
  /* object(B)#1 (4) 
   { ["name"]=> string(6) "王五" 
     ["sex":protected]=> string(5) "woman" 
     ["age":"B":private]=> string(2) "26" 
     ["age":"A":private]=> string(2) "25"
   }*/
    
    echo "<br>";
    $a->getAll();//王五 woman 26
?>

     可以发现无论是公有属性,还是受保护属性都被覆盖,而私有属性因为没有被继承,所以不受影响。

<?php
    class A{
      
        public $name=&#39;张三&#39;;
        protected $sex=&#39;man&#39;;
        private  $age=&#39;25&#39;;

        public function getName(){
           
           echo $this->name."我是父类的getName"."<br>";
        }
        protected function getSex(){
            
            echo $this->sex."我是父类的getSex"."<br>";
        }
        private function getAge(){
            
            echo $this->age."我是父类的getAge"."<br>";
        }

    }
    class B extends A{
        
        public $name=&#39;王五&#39;;
        protected $sex=&#39;woman&#39;;
        private  $age=&#39;26&#39;;

        public function getName(){
           
           echo $this->name."我是子类的getName"."<br>";
        }
        protected function getSex(){
          
            echo $this->sex."我是子类的getSex"."<br>";
        }
        private function getAge(){
          
            echo $this->age."我是子类的getAge"."<br>";
        }
        public function getAll(){
            $this->getName();
            $this->getSex();
            $this->getAge();
        }
    }

    $a=new B();
    $a->getAll();//王五我是子类的getName woman我是子类的getSex 26我是子类的getAge
    echo "<br>";
?>

    小结:公有、受保护的属性重写是直接覆盖父类成员,私有属性不会被覆盖;公有、收保护的方法会被重写,但是私有方法不会被重写(私有方法本质没有被继承)。

2.子类重写父类方法的要求。

    a. 子类重写父类的方法,控制权不能高于父类,即子类可以比父类更开放。

<?php
class Fu{
    protected function show(){
        echo __CLASS__,&#39;<br/>&#39;;
    }
}
class Zi extends Fu{
    protected function show(){}				//正确
    public function show(){}				//允许
    private function show(){}				//错误:控制权比父类更严格
}
?>

    b. PHP中重写要求子类重写父类方法的时候,必须保证与父类同名方法参数一致。

<?php
class Fu{
    protected function show(){
        echo __CLASS__,&#39;<br/>&#39;;
    }
}
class Zi extends Fu{
    public function show(){}
    public function show($a){}			//错误,与父类同名方法不一致
}
?>

    c. 重写针对的是被继承的成员,父类私有方法不会被继承,因此不受要求b规定。

<?php
class Fu{
    private function show(){
        echo __CLASS__,&#39;<br/>&#39;;
    }
}
class Zi extends Fu{
    private function show($name){		//不会报错,因为本质不存在重写(父类Fu::show没有被继承)
        echo $name,&#39;<br/>&#39;;
    }
}
?>

    d.重写是指子类拥有特殊的情况,一般是需要在父类的基础上进行扩展,此时如果想要继续保证父类被重写的方法继续执行(默认永远只访问子类重写的新方法),需要在子类重写方法的时候使用parent关键字。

<?php
class Fu{
    protected function show(){
        echo __CLASS__,&#39;<br/>&#39;;
    }
}
class Zi extends Fu{
    public function show(){
        parent::show();
        
        //扩展业务逻辑
        echo __CLASS__,&#39;<br/>&#39;;
    }
}?>

  小结:parent不能访问父类的属性,可以访问静态属性静态方法类常量普通方法rrreee

공용 속성보호 속성은 모두 에 포함되는 반면 개인 속성은 포함되는 것을 확인할 수 있습니다. 상속되지 않으므로 영향을 받지 않습니다.

rrreee 요약: 공용 및 보호 속성을 재정의하면 부모 클래스 멤버가 직접 재정의되고, 개인 속성은 덮어쓰지 않습니다. 공용 및 보호 메서드는 재정의되지만 개인 메서드는 재정의되지 않습니다(개인 메서드의 본질은 상속되지 않습니다). 2

🎜. 상위 클래스 메서드를 재정의하기 위한 하위 클래스 요구 사항입니다. 🎜🎜🎜🎜 a. 하위 클래스가 상위 클래스의 메서드를 재정의하는 경우 제어 권한은 상위 클래스보다 높을 수 없습니다. 즉, 하위 클래스가 상위 클래스보다 더 개방적일 수 있습니다. 🎜🎜rrreee🎜🎜 b. PHP에서 다시 작성하려면 하위 클래스가 상위 클래스 메서드를 다시 작성할 때 상위 클래스와 동일한 이름을 가진 메서드의 매개 변수가 일관되도록 해야 합니다. 🎜🎜rrreee🎜 🎜 c. 재정의는 상속된 멤버를 위한 것입니다. 상위 클래스의 전용 메서드는 상속되지 않으므로 요구 사항이 적용되지 않습니다. b. 🎜🎜rrreee🎜🎜 d. 재정의는 하위 클래스의 특별한 상황을 의미합니다. 일반적으로 이때 부모 클래스의 재정의된 메서드를 계속 보장하려면 상위 클래스를 기반으로 확장해야 합니다. 클래스는 계속 실행됩니다(기본값은 항상 하위 클래스에 의해 재정의된 새 메서드에 액세스하는 것입니다), 하위 클래스의 메서드를 재정의할 때 parent 키워드를 사용해야 합니다. 🎜🎜rrreee🎜 🎜요약: parent는 상위 클래스의 속성에 액세스할 수 없지만 정적 속성, 정적 메서드클래스 상수일반 메소드. 🎜🎜🎜🎜추천: 🎜php 튜토리얼🎜, 🎜php 비디오 튜토리얼🎜🎜🎜

위 내용은 또 다른 기회가 있다면 재정의를 다시 작성하는 것이 탈출구입니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전