目次
1. 本記事のポイント
- PHPにおけるクラスとオブジェクトの基本構文を、実行可能なサンプル付きで整理
- public/privateなどのアクセス修飾子の役割と注意点を解説
- 実務で頻出する初期化処理(コンストラクタ)の使い方も紹介
2. PHPのクラスとオブジェクトとは?
PHPは手続き型だけでなく、オブジェクト指向プログラミング(OOP)にも対応した言語です。OOPを活用することで、再利用性の高いコード設計や拡張性のあるアプリケーションが可能になります。
クラスはオブジェクトの設計図にあたるもので、プロパティ(変数)とメソッド(関数)をひとまとめにしたものです。これを元にして実体(インスタンス)を生成するのがオブジェクトです。
実務では、フォームデータをオブジェクト化したり、データベース操作をクラスにまとめて再利用する設計がよく見られます。
3. 詳細解説
クラスとオブジェクトの基本定義
クラスを定義し、それを元にオブジェクトを生成する基本構文です。
PHP
<?php
// クラスの定義
class User {
public $name; // 公開プロパティ
public function greet() {
return "こんにちは、{$this->name}さん";
}
}
// オブジェクトの生成と使用
$user = new User();
$user->name = "佐藤";
echo $user->greet(); // 出力: こんにちは、佐藤さん
コンストラクタの活用
生成時に初期値を与えるコンストラクタの使用例です。
PHP
<?php
class User {
public $name;
// コンストラクタ(初期化処理)
public function __construct($name) {
$this->name = $name;
}
public function greet() {
return "こんにちは、{$this->name}さん";
}
}
$user = new User("田中");
echo $user->greet(); // 出力: こんにちは、田中さん
アクセス修飾子と外部アクセス制御
プロパティやメソッドのアクセス範囲を制御するには、public
, private
, protected
を使います。
PHP
<?php
class Account {
private $balance = 1000;
public function getBalance() {
return $this->balance;
}
private function updateBalance($amount) {
$this->balance += $amount;
}
}
$account = new Account();
echo $account->getBalance(); // 出力: 1000
// $account->updateBalance(500); // エラー: privateメソッドは外部から呼べない
比較:public / private / protected
public
:外部からアクセス可能private
:クラス内からのみアクセス可能protected
:継承先のクラスでもアクセス可能
実務では、設計上アクセス範囲を明示し、不要な干渉を防ぐためにprivateやprotectedを活用します。
4. よくあるミス・誤解・落とし穴
プロパティ初期化漏れ
クラス定義時にプロパティの初期値を設定しないと、nullが入る点に注意が必要です。
未定義プロパティにアクセスするとNoticeが発生します。
PHP
$user = new User();
echo $user->name; // Notice: 未定義プロパティにアクセス
__construct の戻り値誤解
PHPのコンストラクタ __construct()
は戻り値を返すことができません。returnを使っても無視されます。
PHP
public function __construct() {
return "NG"; // 効果なし
}
アクセス修飾子のつけ忘れ
プロパティやメソッドには明示的にアクセス修飾子をつけるべきです(PHP 8.0以降は未指定禁止)。
PHP
class Sample {
var $data; // 古い構文(非推奨)
}
5. まとめ
PHPのクラスとオブジェクトは、OOPの基本であり、設計の柔軟性を高める重要な要素です。
- クラスはプロパティとメソッドの集合体であり、オブジェクトはその実体
__construct()
による初期化処理で、堅牢な初期状態を保証- アクセス修飾子の適切な設計が、安全なコードにつながる
初学者はまず public
から使い始め、徐々に private
, protected
の役割を理解して設計に活かしていくとよいでしょう。