>백엔드 개발 >PHP 문제 >PHP 메소드 재작성이란 무엇을 의미하나요?

PHP 메소드 재작성이란 무엇을 의미하나요?

藏色散人
藏色散人원래의
2020-11-24 09:37:412640검색

PHP 메서드 재작성은 부모 클래스에서 상속된 메서드를 재정의하는 것을 의미합니다. 즉, 부모 클래스 메서드를 재정의하는 것입니다. 먼저 생성자 매개 변수를 정의한 다음 "extends" 키워드를 사용하여 하위 클래스를 정의합니다. 마지막으로 부모 클래스 메서드를 재정의합니다.

PHP 메소드 재작성이란 무엇을 의미하나요?

권장: "PHP 비디오 튜토리얼"

  • 이 방법은 모든 브랜드의 컴퓨터에 적합합니다

PHP 객체 지향 프로그래밍(OOP) 방법 재정의 작업 예제

The 이 기사의 예제에서는 PHP 객체 지향 프로그래밍(OOP)의 메서드 재정의 작업을 설명합니다. 참고하실 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

PHP는 약한 유형의 언어이기 때문에 메소드 자체의 매개변수에서 다양한 유형의 데이터를 받을 수 있으며, PHP 메소드는 무한한 수의 데이터를 받을 수 있기 때문에 다른 메서드 이름으로 다른 메서드를 호출하기 위해 다른 수의 매개 변수를 전달하는 것도 유효하지 않으므로 PHP가 오버로드될 수 없습니다.

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 "my name is:" . $this->name . " sex:" . $this->sex . " my age is:" . $this->age;
}
}
//定义一个子类“学生类“使用”extends”关键字来继承”人”类:
class Student extends Person
{
var $school; //学生所在学校的属性
function __construct($name,$sex,$age,$school)
{
parent::__construct($name,$sex,$age);
$this->school = $school;
}
// 重写父类的say()方法
function say()
{
echo "my name is:" . $this->name ." my school is:" . $this->school;
}
//这个学生学习的方法
function study()
{
echo "my name is:" . $this->name . " my school is:" . $this->school;
}
}
?>

또한 하위 클래스가 상위 클래스 메서드를 재정의하는 경우에도 주의해야 합니다. 하위 클래스에 있는 메서드의 액세스 권한은 상위 클래스의 재정의된 메서드에 대한 액세스 권한보다 낮아서는 안 됩니다. 즉, 상위 클래스 메서드 액세스 권한보다 높거나 같아야 합니다.

예를 들어 상위 클래스 메서드의 액세스 권한이 보호되는 경우 하위 클래스에서 재정의할 권한은 보호되고 공개되어야 합니다. 상위 클래스 메서드가 공개이면 하위 클래스에서 재정의할 메서드가 가능합니다. 즉, 클래스의 하위 클래스 메서드는 항상 상위 클래스의 재정의된 메서드보다 높거나 같은 액세스 권한을 갖습니다.

위의 예에서는 "Student" 하위 클래스의 상위 클래스에서 상속된 "say()" 메서드를 덮어썼으며 "메서드"의 확장을 달성했습니다. 그러나 이렇게 하면 위에서 언급한 문제가 해결되지만 실제 개발에서는 메서드가 하나의 코드일 수도 있고 여러 개의 코드일 수도 없습니다. 예를 들어 "Person" 클래스의 "say()" 메서드에는 100줄의 코드가 있습니다. 우리는 이 메소드를 덮어쓰고 원래의 기능과 약간 더 많은 기능을 유지하고 싶기 때문에 원래의 100줄의 코드와 몇 줄의 확장된 코드를 다시 작성해야 합니다. 상위 클래스는 원본 코드를 볼 수 없습니다. 이때 원본 코드를 어떻게 다시 작성합니까? 우리는 또한 해결책을 가지고 있습니다. 즉, 하위 클래스 메서드에서 상위 클래스의 재정의된 메서드를 호출할 수 있습니다. 즉, 재정의된 메서드의 원래 기능을 가져와서 자신만의 함수를 추가할 수 있습니다. . 하위 클래스의 메서드에서 상위 클래스의 재정의된 메서드 호출을 구현하려면:

첫 번째는 상위 클래스의 "클래스 이름::"을 사용하여 상위 클래스의 재정의된 메서드를 호출하는 것입니다. "parent::" " 메서드를 사용하여 상위 클래스의 재정의된 메서드를 호출합니다.

//定义一个子类“学生类“使用”extends”关键字来继承”人”类:
class Student extends Person
{
var $school; //学生所在学校的属性
function __construct($name,$sex,$age,$school)
{
parent::__construct($name,$sex,$age);
$this->school = $school;
}
// 重写父类的say()方法
function say()
{
//使用父类的"类名::"来调用父类中被覆盖的方法;
// Person::say();
//或者使用"parent::"的方试来调用父类中被覆盖的方法;
parent::say();
echo "my name is:" . $this->name ." my school is:" . $this->school;
}
//这个学生学习的方法
function study()
{
echo "my name is:" . $this->name . " my school is:" . $this->school;
}
}

이제 두 가지 방법으로 상위 클래스의 재정의된 메서드에 액세스할 수 있습니다. 어떤 방법을 가장 잘 선택해야 할까요? 사용자는 자신이 작성한 코드가 상위 클래스의 변수와 함수에 액세스한다는 것을 알 수 있습니다. 하위 클래스가 매우 정교하거나 상위 클래스가 매우 전문화된 경우 특히 그렇습니다. 코드에서 상위 클래스의 리터럴 이름을 사용하지 마십시오. 대신 확장 선언에서 하위 클래스가 가리키는 상위 클래스의 이름을 참조하는 특수 이름 parent를 사용하십시오. 이렇게 하면 부모 클래스의 이름이 여러 곳에서 사용되는 것을 방지할 수 있습니다. 구현 중에 상속 트리를 수정해야 하는 경우 클래스의 확장 선언을 수정하면 됩니다.

위 내용은 PHP 메소드 재작성이란 무엇을 의미하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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