일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- switch-case
- Xcode
- DatePicker
- 차이점
- Spring
- jQuery
- 사용법
- Gradle
- 객체
- 옵셔널
- programmers
- 함수
- pagination
- 상속
- PHP
- Java
- EC2
- bootstrap
- 전의 의존성
- CodeIgniter
- guard
- 자료불러오기
- amazon
- SWiFT
- 제어문
- AWS
- 클래스
- class
- CKEditor4
- 2차원 객체배열
Archives
- Today
- Total
not bad 한 개발
PHP - 상속(extends) 본문
(W3School의 PHP 튜토리얼을 사용했습니다.)
https://www.w3schools.com/php/php_oop_inheritance.asp
상속(extends)
상속은 클래스를 다른 클래스에서도 사용이 가능하게 만든 기능입니다, 키워드는 <extends>이고 사용법은 상속받을 클래스 뒤에 <extends>를 작성하고 <extends> 다음에 상속할 클래스 이름을 작성하면 됩니다.
- 상속받을 자식 클래스는 상속해주는 부모 클래스에서 public, protected 프로퍼티와 메서드를 상속받을 수 있습니다.
- 고유한 속성과 메서드를 자식 클래스에 포함할 수 있습니다.
<!DOCTYPE html>
<html>
<body>
<?php
class parents { // 부모 클래스
public $num1; // 부모 프로퍼티 num1
public $num2; // 부모 프로퍼티 num2
public $sum; // 부모 클래스 sum
public function __construct($num1, $num2) {
// 비록 생성자가 부모에 있지만 상속만 되어있으면
// 자식 클래스로 참조변수를 만들었어도 생성자 생성이 가능하다.
$this->num1 = $num1; // 생성자 매개변수를 부모 프로퍼티에 저장
$this->num2 = $num2; // 생성자 매개변수를 부모 프로퍼티에 저장
$this->sum = $this->num1 + $this->num2;
// 저장되어있는 num1, num2를 sum에 저장
}
public function parent_plus() { // 부모클래스의 sum을 출력하는 메서드
echo "parents num1 + parents num2 = {$this->sum}";
// sum의 값을 출력
}
}
class child extends parents { // 자식 클래스
// 부모클래스 parents를 자식클래스 child에게 상속
public function child_plus(){ // 부모클래스의 sum을 출력하는 함수
echo "<br>child num1 + child num2 = {$this->sum}";
// 부모클래스의 sum을 출력
}
public function parent_plus() { // 상속받은 parent_plus를 재정의
echo "extend parents num1 + extend parents num2 = {$this->sum}";
// sum의 값을 출력
}
}
$extend = new child(10, 20);
// 객체 extend를 child형으로 생성및 선언한 후 10, 20으로 초기화
$extend->parent_plus();
// 부모 클래스의 parent_plus()함수를 실행하여 부모클래스의 sum을 출력
$extend->child_plus();
// 자식 클래스의 child_plus()함수를 실행하여 부모클래스의 sum을 출력
?>
</body>
</html>
protected 속성 상속하기
protected 속성은 자신의 클래스 아니면 상속받는 클래스에서만 사용이 가능합니다, 클래스 외부에서 호출은 에러가 나옵니다.
<!DOCTYPE html>
<html>
<body>
<?php
class parents { // 부모 클래스
public $num1; // 부모 프로퍼티 num1
public $num2; // 부모 프로퍼티 num2
protected $sum; // 부모 클래스 sum
protected function parent_plus() {
// protected 속성은 자신의 클래스 아니면 상속받는 클래스에서만 사용이 가능
$this->sum = $this->num1 + $this->num2;
echo "(protected) parents num1 + parents num2 = {$this->sum}";
// sum의 값을 출력
}
}
class child extends parents { // 자식 클래스
// 부모클래스 parents를 자식클래스 child에게 상속
public function child_plus(){ // 부모클래스의 sum을 출력하는 함수
echo "<br>(public) child num1 + child num2 = {$this->sum} <br>";
// 결과 : (public) child num1 + child num2 =
$this->parent_plus();
// sum = num1 + num2를 실행했기 때문에
// 결과 : (protected) parents num1 + parents num2 = 30
echo "<br>(public) child num1 + child num2 = {$this->sum} <br>";
// 결과 : (public) child num1 + child num2 = 30
// parent_plus()함수에서 연산을 수행 했기 때문에 30이 나온다.
}
}
$extend = new child(); // 객체 extend를 child형으로 생성및 선언
$extend->num1 = 10; // 객체 extend의 num1 프로퍼티에 10을 저장
$extend->num2 = 20; // 객체 extend의 num2 프로퍼티에 20을 저장
$extend->child_plus(); // 객체 extend의 child_plus() 메서드 실행
?>
</body>
</html>
생성자와 상속
- 만약 생성자가 부모 클래스에도 있고 자식 클래스에도 있으면 자식 클래스에 있는 생성자로 초기화 합니다.
- 생성자에 있는 매개변수의 개수와 관계없이 자식 클래스에 있는 생성자를 사용합니다.
- 만약 생성자가 중복되지 않고 한 개만 있는 경우 객체의 자료형과 상관없이 생성자가 있는 클래스로 초기화를 합니다.
<!DOCTYPE html>
<html>
<body>
<?php
class parents {
public $num1; // 부모 프로퍼티 num1
public $num2; // 부모 프로퍼티 num2
protected $sum; // 부모 클래스 sum
public function __construct($num1){
$this->num1 = $num1; // 실행되지 않는다.
$this->sum = $this->num1; // 실행되지 않는다.
}
protected function parent_plus() {
// protected 속성은 자신의 클래스 아니면 상속받는 클래스에서만 사용이 가능
echo "(protected) parents num1 + parents num2 = {$this->sum}";
// sum의 값을 출력
}
}
class child extends parents {
// 부모클래스 parents를 자식클래스 child에게 상속
public function __construct($num1, $num2){
$this->num1 = $num1; // 생성자 매개변수 $num1을 클래스 $num1에 저장
$this->num2 = $num2; // 생성자 매개변수 $num2을 클래스 $num2에 저장
$this->sum = $this->num1 + $this->num2;
// 클래스 $num1, 클래스 $num2의 합을 클래스 sum에 저장
}
public function child_plus(){ // 부모클래스의 sum을 출력하는 함수
echo "<br>(public) child num1 + child num2 = {$this->sum} <br>";
// 결과 : (public) child num1 + child num2 =
$this->parent_plus();
// 결과 : (protected) parents num1 + parents num2 = 30
echo "<br>(public) child num1 + child num2 = {$this->sum} <br>";
// 결과 : (public) child num1 + child num2 = 30
}
}
$extend = new child(10,20); // 객체 extend를 child형으로 생성및 선언 후 10, 20으로 초기화
$extend->child_plus(); // 객체 extend의 child_plus() 메서드 실행
?>
</body>
</html>
final 키워드
클래스간에 상속을 방지하거나 메서드의 재정의를 방지하는데 사용됩니다.
<!DOCTYPE html>
<html>
<body>
<?php
final class parents {
// final 키워드가 있으면 상속 및 재정의가 안됩니다.
}
class child extends parents {
}
?>
</body>
</html>
<!DOCTYPE html>
<html>
<body>
<?php
class parents {
final public function parents_func() {
// 재정의 불가능
}
}
class child extends parents {
// 클래스는 상속이 되지만 메소드에 final이 있어서
// 재정의 불가능
public function parents_func() {
}
}
?>
</body>
</html>
'PHP > PHP class' 카테고리의 다른 글
PHP - 소멸자(destruct ) (0) | 2022.05.05 |
---|---|
PHP - 생성자(construct) (0) | 2022.04.30 |
PHP - 접근 제어자 (0) | 2022.04.01 |
PHP - 클래스와 객체 사용하기 (0) | 2022.03.31 |
PHP- 개발환경 설정하기(Bitnami) (0) | 2022.03.18 |
Comments