수업소개
이번 수업에서는 캡슐화(encapsulation)이라는 것을 알아봅니다. 캡슐화는 객체의 사용자에게 필요한 정보나 기능만을 노출시켜서 객체를 보다 사용하기 쉽도록 하고, 객체가 고장나지 않도록 하는 여러가지 방법들입니다. 결과적으로 객체를 좋은 부품으로 만드는데 많은 도움을 줍니다.
객체지향 프로그래밍에서 접근제어자(access modifier) 혹은 속성의 가시성(property visibility)이라는 것은 캡슐화를 달성하는데 중요한 기능을 제공합니다.
수업
<?php class MyFileObject{ private $filename; function __construct($fname){ $this->filename = $fname; if(!file_exists($this->filename)){ die('There is no file '.$this->filename); } } function isFile(){ return is_file($this->filename); } } $file = new MyFileObject('data.txt'); // $file = new MyFileObject(); // $file->filename = 'data.txt'; var_dump($file->isFile()); var_dump($file->filename); ?>
<?php class Person{ private $name; function sayHi(){ print("Hi, I'm {$this->name}."); } function setName($_name){ if(empty($_name)){ die('I need name'); } $this->name = $_name; } function getName(){ return $this->name; } } $egoing = new Person(); $egoing->setName('egoing'); $egoing->sayHi(); print($egoing->getName()); ?>
<?php class Person{ private $name; public function sayHi(){ print("Hi, I'm {$this->name}."); } public function setName($_name){ $this->ifEmptyDie($_name); $this->name = $_name; } public function getName(){ return $this->name; } private function ifEmptyDie($value){ if(empty($value)){ die('I need name'); } } } $egoing = new Person(); $egoing->setName('egoing'); $egoing->sayHi(); print($egoing->getName()); ?>