PHPのアクセス修飾子、カプセル化、アクセサー、コンストラクター/デストラクター

### アクセス修飾子 — public, protected, private
public: 外からOK
protected: クラス内、あるいは継承先のクラス内
private: クラス内のみ

class hoge {
	public function pub_func(){
		echo "call pub_func\n";
		$this->pro_func();
		$this->pri_func();
	}

	protected function pro_func(){
		echo "call pro_func\n";
	}

	private function pri_func(){
		echo "call pri_func\n";
	}
}

$obj = new hoge();
$obj->pub_func();
class hoge {
	public $_pub_val;
	protected $_pro_val;
	private $_pri_val;
}

$obj = new hoge();
$obj->_pub_val = 10;
var_dump($obj);
class hoge {
	
	public function f(){
		$this->_pro_val = 20;
		$this->_pri_val = 20;
	}
public $_pub_val;
public $_pro_val;
public $_pri_val;
}

$obj = new hoge();
$obj->_pub_val = 10;
$obj->f();
var_dump($obj);

隠蔽化とは、全てのプログラム詳細を理解できていなくても、必要な箇所のみ修正•加筆等を行えば、全体として動くことをいう。

### アクセサー(セッター)

class hoge {
	
	public function setVal($v) {
		$this->_val = $v;
	}
	public function getVal(){
		return $this->_val;
	}
}

$obj = new hoge();
$obj->setVal('test');
var_dump($obj->getVal());

### コンストラクター

class hoge {
	
	public function __construct(){
		echo "run constructor\n";
	}
}

$obj = new hoge();

run constructor

デストラクター

class hoge {
	
	public function __destruct(){
		echo "run destructor\n";
	}
}

$obj = new hoge();
$obj = null;
sleep(5);

### immutableなオブジェクト

class hoge {
	
	public function __construct($v){
		$this->_val = $v;
	}
	public function getVal(){
		return $this->_val;
	}
}

$obj = new hoge('vall');
var_dump($obj->getVal());