大規模PHP開発で欠かせないアクセス修飾子とカプセル化、アクセサー、コンストラクター/デストラクター:PHPオブジェクト指向プログラミング入門(2)(1/3 ページ)
「PHPで、どのようにオブジェクト指向プログラミングをしていくか」を解説する連載。今回は、アクセス修飾子、カプセル化と隠蔽(いんぺい)、アクセサー、コンストラクター/デストラクターについて解説し、最後に「再代入の是非」について触れます。
プログラミングの腕前が上がって、より良いコードが書けるように
「PHPで、どのようにオブジェクト指向プログラミングをしていくか」を解説する本連載。初回となる前回の「PHPにおけるクラスの書き方と呼び出し方――インスタンス、メソッド、プロパティ」では、「クラス」の書き方と簡単な使い方、メソッド/クラス定義内関数、プロパティ/クラス定義内変数、マルチプルインスタンスを紹介しました。
今回は、アクセス修飾子、カプセル化と隠蔽(いんぺい)、アクセサー、コンストラクター/デストラクターについて解説し、最後に「再代入の是非」について触れます。
アクセス修飾子(アクセス権)――public、protected、private
まずは、前回「関数(メソッド)はpublicで、変数(プロパティ)はprivate」と固定で書いていた「アクセス修飾子(アクセス権)」について、もう少し詳しく解説していきます。
アクセス修飾子はメソッドやプロパティを「どれくらい外側から触ってもよいか」を指定するためのキーワードで、public(外からOK)、protected(クラス内、あるいは継承先のクラス内ならOK)、private(クラス内のみ)の3種類です。
実際にコードを書いて、「できること」と「できないこと」をコードで確認していきましょう。
<?php
class hoge {
public function pub_func() {
echo "call pub_func\n";
}
protected function pro_func() {
echo "call p_func\n";
}
private function pri_func() {
echo "call pri_func\n";
}
}
//
$obj = new hoge();
$obj->pub_func();
//$obj->pro_func(); // コメントを外すとエラーになる
//$obj->pri_func(); // コメントを外すとエラーになる
public以外のアクセス修飾子(protectedやprivate)を指定すると、クラスの外からはそのメソッドが呼び出せなくなります。
「そのメソッドを定義しているクラスの中からの呼び出しならprotectedやprivateなメソッドが呼び出せる」ことは、以下のコードから確認できます。
<?php
class hoge {
public function pub_func() {
echo "call pub_func\n";
$this->pro_func();
$this->pri_func();
}
protected function pro_func() {
echo "call p_func\n";
}
private function pri_func() {
echo "call pri_func\n";
}
}
//
$obj = new hoge();
$obj->pub_func();
privateとprotectedの違いは「継承」と深い関係があるので、次回、継承を解説するタイミングで合わせて説明します。今はいったん「同じようなものである」と考えておいてよいでしょう。
上述はメソッド(関数)ですが、プロパティ(変数)も同じアクセス修飾子を持ち、同じ状況になります。
<?php
class hoge {
public $_pub_val;
protected $_pro_val;
private $_pri_val;
}
//
$obj = new hoge();
$obj->_pub_val = 10;
//$obj->_pro_val = 20; // コメントを外すとエラーになる
//$obj->_pri_val = 30; // コメントを外すとエラーになる
var_dump($obj);
protectedやprivateなプロパティ(変数)は、メソッド(関数)の中からであれば、触ることができます。
<?php
class hoge {
//
public function f() {
$this->_pro_val = 20;
$this->_pri_val = 30;
}
//
public $_pub_val;
protected $_pro_val;
private $_pri_val;
}
//
$obj = new hoge();
$obj->_pub_val = 10;
$obj->f();
var_dump($obj);
ここでは「アクセス修飾子によって、こんなことができる、またはできない」という実際の動きを理解してください。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
初心者がPHPプログラミングを始めるための基礎知識とXAMPPのインストール
オープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載。初回は、PHPの概要や特徴を紹介し、環境構築や「Hello World!」までの手順などを解説します【PHP 7.1含め2017年の情報に合うように対応、XAMPP環境構築を追記】。
PHP編に突入! まずはソースをダウンロード
今回からPHPのビルドとインストールに入ります。まずはPHPという言語の概要と、ソースコードの入手法を解説します(編集部)
理論編:PHPについて知ろう
スクリプトを記述するだけの簡単なプログラミングで、Web対応の高速なデータベースアプリケーションを実現する手法としてPHPが急速に注目を集めている。しかもデータベースはオープンソースのPostgreSQLだけでなく、Oracleなどの商用データベースも扱える。ここでは、5月にバージョンアップしたばかりのPHP4によるWeb-DBシステム構築法を紹介しよう。- Mac OS X+PHPでオールインワン環境(インストール編):Mac内にPHP4、5、6を同居させるコツ
PHP4の開発は終了したが、移行の問題は残されている。異なるバージョンのPHPをスムーズに切り替えるには?
@IT自分戦略研究所 資格辞典:PHP技術者認定試験
自分をプログラミング言語に例えると何?
2013年1月16日、エンジニアたちが集うトークライブイベント「TechLION vol.11」が開催された。今回のレポートでは、「自分をプログラミング言語に例える」というお題に答えた5人の技術者の回答をみていく。