PHP가 상위 클래스 인스턴스를 호출하는 상위를 구현하는 방법에 대한 자세한 설명

伊谢尔伦
풀어 주다: 2023-03-13 08:22:02
원래의
2108명이 탐색했습니다.

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

덮어쓰기: 재설계되었습니다.

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

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

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

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

그래서 parent::construct()는 상위 클래스의 constructor() 메서드를 호출한다는 의미입니다.

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


코드는 다음과 같습니다.

<?php
header(&#39;Content-type:text/html;charset=utf-8&#39;);
// 从这篇开始,类名首字母一律大写,规范写法
class ShopProduct{    // 声明类
public $title; // 声明
属性
public $producerMainName;
public $producerFirstName;
public $price;
function construct($title,$firstName,$mainName,$price){
$this -> title = $title;    // 给属性 title 赋传进来的值
$this -> producerFirstName= $firstName; 
$this -> producerMainName = $mainName; 
$this -> price= $price; 
}
function getProducer(){    // 声明方法
return "{$this -> producerFirstName }"."{$this -> producerMainName}";
}
function getSummaryLine(){
$base = "{$this->title}( {$this->producerMainName},";
$base .= "{$this->producerFirstName} )";
return $base;
}
}
class CdProduct extends ShopProduct {
public $playLenth;
function construct($title,$firstName,$mainName,$price,$playLenth){
parent::construct($title,$firstName,$mainName,$price);
$this -> playLenth= $playLenth;
}
function getPlayLength(){
return $this -> playLength;
}
function getSummaryLine(){
$base = "{$this->title}( {$this->producerMainName},";
$base .= "{$this->producerFirstName} )";
$base .= ":playing time - {$this->playLength} )";
return $base;
}
}
// 定义类
class BookProduct extends ShopProduct {
public $numPages;
function construct($title,$firstName,$mainName,$price,$numPages){
parent::construct($title,$firstName,$mainName,$price);
$this -> numPages= $numPages;
}
function getNumberOfPages(){
return $this -> numPages;
}
function getSummaryLine(){
$base = "{$this->title}( {$this->producerMainName},";
$base .= "{$this->producerFirstName} )";
$base .= ":page cont - {$this->numPages} )";
return $base;
}
}
 
?>
로그인 후 복사

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

parent는 상위 클래스의 재정의된 메서드를 호출합니다.

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

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

코드

// 父类:ShopProduct
function getSummaryLine(){
$base = "{$this->title}( {$this->producerMainName},";
$base .= "{$this->producerFirstName} )";
return $base;
}
// 子类:CdProduct
function getSummaryLine(){
$base = parent::getSummaryLine();
$base .= ":playing time - {$this->playLength} )";
return $base;
}
// 子类:BookProduct
function getSummaryLine(){
$base = parent::getSummaryLine();
$base .= ":page cont - {$this->numPages} )";
return $base;
}
로그인 후 복사

현재 위치 상위 클래스 ShopProduct는 getSummaryLine() 메서드에 대한 "핵심" 기능을 완성한 다음 하위 클래스에서 상위 클래스 메서드를 호출하고 요약에 더 많은 데이터를 추가합니다.

string , 방법 확장이 실현됩니다.

위 내용은 PHP가 상위 클래스 인스턴스를 호출하는 상위를 구현하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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