찾다
백엔드 개발PHP 튜토리얼PHP 객체 지향 오버로딩을 위한 새로운 메소드 인스턴스에 대한 자세한 설명

PHP를 배울 때, PHP의 메소드는 오버로드될 수 없다는 것을 알게 됩니다. 소위 메서드 오버로딩은 동일한 메소드 이름을 다른 "매개변수 수" 또는 "매개변수 유형"에 따라 정의하는 것입니다. 동일한 메소드 이름을 가진 다른 메소드.

12. 새로운 메소드 오버로드
PHP를 배우다 보면, PHP의 메소드는 오버로드될 수 없다는 것을 알게 됩니다. 소위 메소드 오버로딩은 "매개변수" "번호" 또는 "매개변수 유형"을 통해 동일한 메소드 이름을 정의하는 것입니다. 다른 이름으로 동일한 메서드에 액세스하려면 다릅니다. 그러나 PHP는 약한 유형의 언어이기 때문에 메소드의 매개변수에서 다양한 유형의 데이터를 받을 수 있으며, PHP 메소드는 무한한 수의 매개변수를 받을 수 있으므로 다른 수의 매개변수를 전달하여 호출할 수 없습니다. 동일한 메소드 이름을 가진 다른 메소드도 유효하지 않습니다. 따라서 PHP에는 메소드 오버로딩이 없습니다. 오버로드될 수 없습니다. 즉, 동일한 메서드 이름을 가진 메서드를 프로젝트에 정의할 수 없습니다. 또한, PHP에는 이름 부분공간 개념이 없기 때문에 동일한 이름의 메소드는 동일한 페이지 및 포함된 페이지에 정의될 수 없으며, 물론 PHP에서 제공하는 메소드와 동일한 이름으로 정의될 수도 없습니다. 동일한 클래스에는 동일한 이름의 메소드를 정의할 수 없습니다.
여기서 새로운 메서드를 오버로드한다는 것은 무엇을 의미하나요? 사실, 우리가 새 메소드 오버로드라고 부르는 것은 하위 클래스가 상위 클래스의 기존 메소드를 덮어쓰는 것입니다. 상위 클래스의 메소드를 직접 상속받아 사용할 수는 없나요? 하지만 우리가 다루어야 할 몇 가지 상황이 있습니다. 예를 들어 앞서 언급한 예에는 "Person" 인간에 "speak" 메서드가 있고 "Person" 클래스를 상속하는 모든 하위 클래스는 Can "speak"입니다. , "Student"
클래스는 "Person" 클래스의 하위 클래스이므로 "Student" 인스턴스는 "말할" 수 있지만 인간의 "speak
talk" 메서드는 "Person" 클래스의
attributes
라고 말합니다. , "Student" 클래스는 "Person" 클래스를 확장하고 몇 가지 새로운 속성을 추가합니다. 상속된 "say()" 말하기 메서드를 사용하는 경우
"Person" 클래스에서 상속된 속성을 알려줄 수 있는 경우에만 가능합니다. 상속된 "say()" 메소드를 사용하여 새로 확장된 속성을 말할 수는 없습니다. 그러면 어떤 사람들은 'Student' 하위 클래스가 말하기를 위한 새로운 메소드를 정의하는 것만으로도 충분하지 않을까요? 하위 클래스의 속성? 추상적인 관점에서 볼 때 "학생"은 두 가지 말하기 방법을 가질 수 없습니다. 두 가지 다른 말하기 방법을 정의하더라도 원하는 "말하기" 방법을 얻을 수 있습니다. 상속된 항목은 사용할 기회가 없을 수 있으며, 상속된 항목은 삭제할 수 없습니다.
이때는 Coverage를 사용하겠습니다.
PHP에서는 동일한 이름의 메소드를 정의할 수 없지만, 부모-자식 관계를 갖는 두 클래스에서는 하위 클래스에서 상위 클래스와 동일한 이름의 메소드를 정의하여 상위 클래스에서 상속받은 메소드를 재정의할 수 있습니다. .
코드 조각


코드는 다음과 같습니다.

<?php 
//定义一个“人”类做为父类 
class Person{ 
//下面是人的成员属性 
var $name; //人的名子 
var $sex; //人的性别 
var $age; //人的年龄 
//定义一个
构造方法
参数为属性姓名$name、性别$sex和年龄$age进行赋值 
function construct($name, $sex, $age){ 
$this->name=$name; 
$this->sex=$sex; 
$this->age=$age; 
} 
//这个人可以说话的方法, 说出自己的属性 
function say() { 
echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."<br>"; 
} 
} 
class Student 
extends
 Person 
{ 
var $school; //学生所在学校的属性 
//这个学生学习的方法 
function study() { 
echo "我的名子叫:".$this->name." 我正在”.$this->school.”学习<br>"; 
} 
//这个学性可以说话的方法, 说出自己所有的属性,覆盖了父类的同名方法 
function say() { 
echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."我在 
".$this->school."上学.<br>"; 
} 
} 
?>
위의 예에서는 "Student" 하위 클래스의 상위 클래스에서 상속된 "say()" 메서드를 재정의하여 구현했습니다. "메서드" 확장됨.
그러나 이렇게 하면 위에서 언급한 문제가 해결되지만 실제 개발에서는 메서드가
하나의 코드 또는 여러 개의 코드로 구성될 수 없습니다. 예를 들어 "Person" 클래스의 "say()" 메서드에는 100개의 코드가 있습니다. 이 메서드의 원래 기능을 덮어쓰고 유지하면서 좀 더 많은 기능을 추가하려면 원래 100줄의 코드를 한 번 다시 작성하고 몇 줄의 확장된 코드를 추가해야 합니다. 하지만 어떤 경우에는 원본 코드가 상위 클래스의 메서드에 표시되지 않습니다. 이때 원본 코드를 어떻게 다시 작성합니까? 우리는 또한 해결책을 가지고 있습니다. 즉, 하위 클래스의 메서드에서 상위 클래스의 재정의된 메서드를 호출할 수 있습니다. 즉, 재정의된 메서드의 원래 기능을 가져와 자신만의 함수 중 일부를 추가하는 것입니다. 하위 클래스의 메서드에서 상위 클래스의 재정의된 메서드를 호출하는 방법은 두 가지입니다.
하나는 상위 클래스의 "클래스 이름::"을 사용하여 상위 클래스의 재정의된 메서드를 호출하는 것입니다. "parent:" :" 상위 클래스에서 재정의된 메서드를 호출하는 메서드;
코드 조각


코드는 다음과 같습니다.
class Student extends Person{ 
var $school; //学生所在学校的属性 
//这个学生学习的方法 
function study() { 
echo "我的名子叫:".$this->name." 我正在”.$this->school.”学习<br>"; 
} 
//这个学性可以说话的方法, 说出自己所有的属性,覆盖了父类的同名方法 
function say() { 
//使用父类的“类名::“来调用父类中被覆盖的方法; 
// Person::say(); 
//或者使用“parent::”的方试来调用父类中被覆盖的方法; 
parent::say(); 
//加上一点自己的功能 
echo “我的年龄是:".$this->age."我在".$this->school."上学.<br>"; 
} 
}


이제 상위 클래스에서 재정의된 메서드에 액세스하는 두 가지 방법이 있습니다. 우리는 무엇을 선택합니까? 사용자는

会发现自己写的代码访问了父类的变量和函数。如果子类非常精炼或者父类非常专业化的时
候尤其是这样。不要用代码中父类文字上的名字,应该用特殊的名字parent,它指的就是子
类在extends 声明中所指的父类的名字。这样做可以避免在多个地方使用父类的名字。如果继
承树在实现的过程中要修改,只要简单地修改类中extends 声明的部分。
同样,构造方法在子类中如果没有声明的话,也可以使用父类中的构造方法,如果子类
中重新定义了一个构造方法也会覆盖掉父类中的构造方法,如果想使用新的构造方法为所有
属性赋值也可以用同样的方式。
代码片段

代码如下:

class Student extends Person{ 
var $school; //学生所在学校的属性 
function construct($name, $sex, $age, $school){ 
//使用父类中的方法为原有的属性赋值 
parent::construct($name, $sex, $age); 
$this->school=$school; 
} 
//这个学生学习的方法 
function study() { 
echo "我的名子叫:".$this->name." 我正在”.$this->school.”学习<br>"; 
} 
//这个人可以说话的方法, 说出自己的属性 
function say() { 
parent::say(); 
//加上一点自己的功能 
echo “我的年龄是:".$this->age."我在".$this->school."上学.<br>";


위 내용은 PHP 객체 지향 오버로딩을 위한 새로운 메소드 인스턴스에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP에서 인터페이스를 어떻게 생성하고 사용합니까?PHP에서 인터페이스를 어떻게 생성하고 사용합니까?Apr 30, 2025 pm 03:40 PM

이 기사는 PHP의 인터페이스를 생성, 구현 및 사용하는 방법을 설명하여 코드 구성 및 유지 관리에 대한 이점에 중점을 둡니다.

crypt ()와 password_hash ()의 차이점은 무엇입니까?crypt ()와 password_hash ()의 차이점은 무엇입니까?Apr 30, 2025 pm 03:39 PM

이 기사에서는 PHP의 암호 해싱에 대한 Crypt ()와 Password_hash ()의 차이점에 대해 논의하여 최신 웹 애플리케이션에 대한 구현, 보안 및 적합성에 중점을 둡니다.

PHP의 크로스 사이트 스크립팅 (XSS)을 어떻게 방지 할 수 있습니까?PHP의 크로스 사이트 스크립팅 (XSS)을 어떻게 방지 할 수 있습니까?Apr 30, 2025 pm 03:38 PM

기사는 입력 유효성 검사, 출력 인코딩 및 OWASP ESAPI 및 HTML 청정기와 같은 도구를 통해 PHP의 크로스 사이트 스크립팅 (XSS) 방지에 대해 논의합니다.

PHP의 자동로드 란 무엇입니까?PHP의 자동로드 란 무엇입니까?Apr 30, 2025 pm 03:37 PM

PHP의 자동로드는 필요할 때 클래스 파일을 자동으로로드하여 메모리 사용을 줄이고 코드 구성을 향상시켜 성능을 향상시킵니다. 모범 사례에는 PSR-4 사용 및 효과적으로 코드 구성이 포함됩니다.

PHP 스트림이란 무엇입니까?PHP 스트림이란 무엇입니까?Apr 30, 2025 pm 03:36 PM

PHP 스트림은 일관된 API를 통해 파일, 네트워크 소켓 및 압축 형식과 같은 자원의 처리를 통합하여 복잡성을 추상화하고 코드 유연성 및 효율성을 향상시킵니다.

PHP를 사용하여 업로드 할 수있는 파일의 최대 크기는 얼마입니까?PHP를 사용하여 업로드 할 수있는 파일의 최대 크기는 얼마입니까?Apr 30, 2025 pm 03:35 PM

이 기사에서는 PHP의 파일 업로드 크기 관리, 기본 제한 2MB 및 php.ini 설정을 수정하여이를 늘리는 방법에 중점을 둔 파일 업로드 크기 관리에 대해 설명합니다.

PHP의 무효 유형은 무엇입니까?PHP의 무효 유형은 무엇입니까?Apr 30, 2025 pm 03:34 PM

이 기사에서는 PHP 7.1에 도입 된 PHP의 무효 유형에 대해 설명하여 변수 또는 매개 변수가 지정된 유형 또는 널이 될 수 있습니다. 개선 된 가독성, 유형 안전 및 명시 적 의도와 같은 이점을 강조하고 선언하는 방법을 설명합니다.

unset ()와 unlink () 함수의 차이점은 무엇입니까?unset ()와 unlink () 함수의 차이점은 무엇입니까?Apr 30, 2025 pm 03:33 PM

이 기사에서는 Unset ()와 Unlink () 기능의 차이점에 대해 설명합니다. 프로그래밍의 목적 및 사용 사례에 중점을 둡니다. unset ()는 메모리에서 변수를 제거하고 Unlink ()는 파일 시스템에서 파일을 삭제합니다. 둘 다 Effec에 중요합니다

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 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

안전한 시험 브라우저

안전한 시험 브라우저

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

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

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

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

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구