[php]クラスを継承


#1

<?php
class Animal {
    function run() {
        print('running....');
    }

    function breathe() {
        print('breathing...');
    }
}

// Animal 클래스 상속 받음.
class Human extends Animal {
    function think() {
        print('thinking...');
    }
    function talk() {
        print('talking...');
    }
}


$animal = new Animal();
$animal->run();
$animal->breathe();

$human = new Human();
$human->run();
$human->breathe();
$human->think();
$human->talk();

#2

<?php
$file = new SplFileObject('data.txt');
var_dump($file->fread($file->getSize()));
$file->rewind(); // 파일 커서 처음으로 이동
var_dump($file->fread($file->getSize()));


class MyFileObject extends SplFileObject {
    function getContents() {
        $contents = $this->fread($this->getSize());
        $this->rewind();
        return $contents;
    }
}

$myFile = new MyFileObject('data.txt');
var_dump($myFile->getContents());

#3

<?php
class ParentClass{
  function callMethod($param){
    echo "<h1>Parent {$param}</h1>";
  }
}
class ChildClass extends ParentClass{
  function callMethod($param){
    parent::callMethod($param);
    echo "<h1>Child {$param}</h1>";
  }
}
$obj = new ChildClass();
$obj->callMethod('method');

#4

<?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 callProtected() {
        echo $this->_protected;
    }
    function callPrivate() {
        echo $this->_private;
    }
}

$obj = new ChildClass();
echo $obj->_public;
//echo $obj->_protected; // 직접 접근 불가
echo $obj->_private;
$obj->callPublic();
$obj->callProtected(); // 접근 가능
$obj->callPrivate();

#5

<?php
// 클래스 전체를 상속받지 못하게 하려면 final class 사용
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();
  • Thanks to生活コード