>백엔드 개발 >PHP 튜토리얼 >PHP는 생성자 메서드를 호출하는 부모를 구현하고 부모 class_php 팁의 재정의된 메서드를 구현합니다.

PHP는 생성자 메서드를 호출하는 부모를 구현하고 부모 class_php 팁의 재정의된 메서드를 구현합니다.

WBOY
WBOY원래의
2016-05-16 20:23:211064검색

이 기사의 예에서는 PHP가 부모를 구현하여 부모 클래스의 생성자 메서드와 재정의된 메서드를 호출하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

재정의: 재설계되었습니다.

하위 클래스에서 생성자를 정의할 때 상위 클래스의 생성자에 매개변수를 전달해야 합니다. 그렇지 않으면 불완전하게 생성된 객체를 얻을 수 있습니다.

부모 클래스의 메서드를 호출하려면 먼저 클래스 자체를 참조하는 방법을 찾아야 합니다. PHP는 이를 위해 parent 키워드를 제공합니다.

부모가 부모 클래스의 생성자를 호출합니다

객체가 아닌 클래스의 메서드를 참조하려면 -> 대신 ::(콜론 2개)를 사용하세요.

따라서 parent::__construct()는 상위 클래스의 __construct() 메서드를 호출하는 것을 의미합니다.

이전 글 "클래스 상속을 사용하여 코드 중복 등의 문제 해결"의 코드를 수정하여 각 클래스가 자신의 데이터만 처리하도록 합니다.

코드 복사 코드는 다음과 같습니다.
header('Content-type:text/html;charset=utf-8');
// 본 글부터 클래스명의 첫 글자는 대문자로 표기해야 하며, 작성 방법도 표준화되어 있습니다
class ShopProduct{ // 클래스 선언
public $title; // 속성 선언
공개 $producerMainName;
공개 $producerFirstName;
공개 $가격;
함수 __construct($title,$firstName,$mainName,$price){
$this -> title = $title; // 속성 제목에 전달된 값을 할당합니다
$this -> producerFirstName= $firstName; $this -> producerMainName = $mainName
$이것 -> 가격= $가격
}
function getProducer(){ //선언 방법
"{$this -> producerFirstName }"를 반환합니다."{$this -> producerMainName}";
}
함수 getSummaryLine(){
$base = "{$this->title}({$this->producerMainName},";
$base .= "{$this->producerFirstName} )";
$base를 반환합니다;
}
}
CdProduct 클래스는 ShopProduct를 확장합니다. {
공개 $playLenth;
함수 __construct($title,$firstName,$mainName,$price,$playLenth){
parent::__construct($title,$firstName,$mainName,$price);
$this -> playLenth= $playLenth;
}
함수 getPlayLength(){
$this 반환 -> playLength;
}
함수 getSummaryLine(){
$base = "{$this->title}({$this->producerMainName},";
$base .= "{$this->producerFirstName} )";
$base .= ":재생 시간 - {$this->playLength} )";
$base를 반환합니다;
}
}
// 클래스 정의
BookProduct 클래스는 ShopProduct를 확장합니다. {
공개 $numPages;
함수 __construct($title,$firstName,$mainName,$price,$numPages){
parent::__construct($title,$firstName,$mainName,$price);
$this -> 페이지 수= $numPages;
}
함수 getNumberOfPages(){
$this 반환 -> numPages;
}
함수 getSummaryLine(){
$base = "{$this->title}({$this->producerMainName},";
$base .= "{$this->producerFirstName} )";
$base .= ":페이지 계속 - {$this->numPages} )";
$base를 반환합니다;
}
}

?>

각 하위 클래스는 자체 속성을 설정하기 전에 상위 클래스의 생성자를 호출합니다. 이제 기본 클래스(상위 클래스)는 자신의 데이터만 알고 있으므로 하위 클래스에 대한 정보를 상위 클래스에 알리지 않도록 해야 합니다. 이는 경험상 특정 하위 클래스의 정보가 " "confidential" 이므로 부모 클래스는 자신의 정보를 알고 있으며 다른 서브클래스는 이를 상속받을 수 있으므로 서브클래스의 정보는 기밀로 유지되지 않습니다.

부모가 부모 클래스의 재정의된 메서드를 호출합니다.

parent 키워드는 상위 클래스를 재정의하는 모든 메서드에서 사용할 수 있습니다. 부모 클래스의 메서드를 재정의할 때 부모 클래스의 함수를 삭제하는 것이 아니라 확장하고 싶습니다. 이는 현재 객체에서 부모 클래스의 메서드를 호출하여 달성할 수 있습니다.

위의 코드를 보면 두 하위 클래스의 getSummaryLine() 메서드에서 많은 코드가 반복되는 것을 볼 수 있습니다. 중복 개발 대신 ShopProduct 클래스에 이미 존재하는 기능을 활용해야 합니다.

코드 복사 코드는 다음과 같습니다.
// 상위 클래스: ShopProduct
함수 getSummaryLine(){
$base = "{$this->title}({$this->producerMainName},";
$base .= "{$this->producerFirstName} )";
$base를 반환합니다;
}
// 하위 클래스: CdProduct
함수 getSummaryLine(){
$base = parent::getSummaryLine();
$base .= ":재생 시간 - {$this->playLength} )";
$base를 반환합니다;
}
// 하위 클래스: BookProduct
함수 getSummaryLine(){
$base = parent::getSummaryLine();
$base .= ":페이지 계속 - {$this->numPages} )";
$base를 반환합니다;
}


부모 클래스 ShopProduct의 getSummaryLine() 메서드에 대한 "핵심" 함수를 완성한 다음 간단히 하위 클래스에서 부모 클래스 메서드를 호출한 다음 요약 문자열에 더 많은 데이터를 추가하면 메서드 확장이 실현됩니다.

이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.

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