Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- BOJ
- dfs
- C언어
- server
- 인프런
- php
- udemy
- BFS
- Math
- programmers
- Cleancode
- 따라하면서 배우는 C언어
- Algospot
- C
- BASIC
- 따라하며 배우는 C언어
- 종만북
- Python
- JavaScript
- greedy
- 정수론
- String
- 따배씨
- sorting
- 생활코딩
- Algorithm
- 백준
- graph
- web
- DP
Archives
- Today
- Total
몽상실현개발주의
[생활코딩] 17.13~15 상속 본문
생활코딩 php 강좌
17. PHP의 객체 지향 프로그래밍
17.13 상속 - Override 와 Parent
- 부모 클래스와 같은 이름의 메소드를 사용 하고 싶을때, 자식 메소드에 새롭게 정의 하면 덮어쓰는 효과가 발생
- 부모 메소드를 호출하고 싶다면 parent 키워드로 호출 가능
<?php
class ParentClass{
function callMethod($param){
echo "<h2>Parent {$param}</h2>";
}
}
class ChildClass extends ParentClass{
function callMethod($param){
parent::callMethod($param);
echo "<h2>Child {$param}</h2>";
}
}
$obj = new ChildClass();
$obj->callMethod('method');
?>
- 자식 클래스에서 부모클래스의 method override (재정의) 가능
- 자식 클래스에서 부모클래스의 method 호출 가능
- parent::
17.14 상속 - 접근제어자 protected
- 변수에 대해 상속 관계에 있는 메소드에서는 접근할 수 있지만, 인스턴스를 통해서는 직접적으로 접근하는 것을 막고 싶을 때 protected 를 사용
<?php
use ParentClass as GlobalParentClass;
class ParentClass{
public $_public = '<h1>public</h1>';
protected $_protected = '<h1>protected</h1>';
private $_private = '<h1>private</h1>';
}
class ClidClass extends ParentClass{}
$obj = new ChildClass();
echo $obj->_public;
echo $obj->_private;
?>
// public
// Notice: Undefined property: ChildClass::$_private in
- 자식 클래에 없는 멤버 변수는, 부모 클래스에서 호출
- private 변수는 자식 클래스에서 호출 불가
<?php
class ParentClass{
public $_public = '<h1>public</h1>';
protected $_protected = '<h1>protected</h1>';
private $_private = '<h1>private</h1>';
}
class ChildClass extends ParentClass{
function callPublic(){
echo $this->_public;
}
function callPrivate(){
echo $this->_private;
}
}
$obj = new ChildClass();
echo $obj->callPublic();
echo $obj->callPrivate();
?>
- 자식 클래에 없는 멤버 변수는, 부모 클래스에서 호출
- private 변수는 자식 클래스에서 호출 불가
- public 은 부모/자식 모두 접근 가능
- private 은 instance 내부에서만 접근 가능하여 상속받은 자식 클래스에서 접근 불가
<?php
class ParentClass{
protected $_protected = '<h1>protected</h1>';
}
class ChildClass extends ParentClass{
function callProtected(){
echo $this->_protected;
}
}
$obj = new ChildClass();
$obj->callProtected();
echo $obj->_protected;
?>
// protected
// Fatal error: Uncaught Error: Cannot access protected property ChildClass::$_protected ... on line 14
- protected 로 선언
- 부모 멤버에 대해 자식 클래스 instance method 로 접근 가능
- 무모 멤버에 대해 자식 클래스 instance 의 직접 접근 불가
- class 의 멤버 선언 기초
- 초심자이면 public/private 를 두고 결정
- 기본적으로 instance 변수는 private 로 선언
- 변수가 노출될 가능성이 있을때, public 으로 선언
- 자식 class 에서 method 를 통해 내부적으로 접근이 가능 해야 하지만, 외부에서 접근을 통제 하고 싶을때 protected
- 초심자이면 public/private 를 두고 결정
17.15 상속 - 상속금지 (final)
- 메소드나 클래스에 대해 상속을 금지 할 때, final 키워드를 사용
<?php
class ParentClass{
function a(){
echo 'Parent';
}
final function b(){
echo 'Parent B';
}
}
class ChildClass extends ParentClass{
function a(){
echo 'Child';
}
function b(){
echo 'Child B';
}
}
$obj = new ChildClass();
$obj->a();
$obj->b();
?>
// Fatal error: Cannot override final method ParentClass::b() in ...
- final 로 선언한 ParentClass 의 b() method 는 상속되지 않음
<?php
final class ParentClass{}
class ChildClass extends ParentClass{}
$obj = new ChildClass();
?>
// Fatal error: Class ChildClass may not inherit from final class (ParentClass) in ...
- final 로 선언한 ParentClass 는 상속이 불가
이 글의 모든 사진과 내용의 출처는 생활코딩에 있음을 알려드립니다.
'Language > php' 카테고리의 다른 글
[생활코딩] 17.12 컴포저 (composer) (0) | 2021.06.08 |
---|---|
[생활코딩] 17.11 네임스페이스 (0) | 2021.06.08 |
[생활코딩] 17.10 클래스 로딩 (0) | 2021.06.08 |
[생활코딩] 17.9 클래스 멤버 만들기 (static) (0) | 2021.06.08 |
[생활코딩] 17.8 상속 기본 (inheritance) (0) | 2021.06.06 |
Comments