Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
class / new / $this対応: PHP 5(2004)
クラスを定義してオブジェクトを生成するための基本構文です。データと処理をひとまとめにしたオブジェクト指向プログラミングの土台となります。
構文
// クラスを定義します。
class クラス名 {
// プロパティの宣言
public $property;
// コンストラクター
public function __construct($param) {
$this->property = $param;
}
// メソッドの定義
public function method() {
return $this->property;
}
}
// インスタンスを生成します。
$obj = new クラス名($value);
構文一覧
| 構文 | 概要 |
|---|---|
| class | クラスを定義するキーワードです。プロパティとメソッドをまとめた設計図を作成します。 |
| new | クラスからインスタンスを生成するキーワードです。生成時に『__construct()』が自動的に呼び出されます。 |
| $this | インスタンス自身を参照する特殊変数です。メソッド内で自分のプロパティやメソッドにアクセスする際に使用します。 |
| __construct() | コンストラクターです。『new』でインスタンスを生成した際に自動的に実行され、初期化処理を行います。 |
| __destruct() | デストラクターです。オブジェクトが破棄される際に自動的に実行され、後片付け処理を行います。 |
サンプルコード
<?php
// 基本的なクラスの定義です。
class User {
public string $name;
public int $age;
public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
}
public function greet(): string {
return "こんにちは、{$this->name}です。{$this->age}歳です。";
}
}
$user = new User("太郎", 25);
echo $user->greet(); // 『こんにちは、太郎です。25歳です。』と出力されます。
echo $user->name; // 『太郎』と出力されます。
// PHP 8.0 のコンストラクタプロモーションを使うと、より簡潔に書けます。
class Product {
public function __construct(
public readonly string $name,
public readonly int $price,
public readonly int $stock = 0
) {}
public function format_price(): string {
return "¥" . number_format($this->price);
}
}
$product = new Product("PHPの教科書", 2980, 50);
echo $product->format_price(); // 『¥2,980』と出力されます。
echo $product->name; // 『PHPの教科書』と出力されます。
// デストラクターの例です。
class FileHandler {
private $handle;
public function __construct(string $path) {
$this->handle = fopen($path, 'r');
echo "ファイルを開きました。\n";
}
public function __destruct() {
if ($this->handle) {
fclose($this->handle);
}
echo "ファイルを閉じました。\n";
}
}
$file = new FileHandler("/tmp/test.txt");
unset($file); // デストラクターが実行されます。
// メソッドチェーンの実装例です。
class QueryBuilder {
private string $table = '';
private string $where = '';
public function from(string $table): self {
$this->table = $table;
return $this; // $this を返すことでチェーンを実現します。
}
public function where(string $condition): self {
$this->where = $condition;
return $this;
}
public function build(): string {
return "SELECT * FROM {$this->table} WHERE {$this->where}";
}
}
$sql = (new QueryBuilder())->from('users')->where('age > 20')->build();
echo $sql; // 『SELECT * FROM users WHERE age > 20』と出力されます。
概要
クラスはオブジェクト指向プログラミングの基本単位で、関連するデータとそれを操作するメソッドをひとまとめにした設計図です。『new』キーワードでインスタンスを生成すると、『__construct()』が自動的に実行されて初期値が設定されます。
PHP 8.0 で導入されたコンストラクタプロモーションを使うと、プロパティの宣言・型指定・代入を1行で記述できます。さらに『readonly』修飾子を付ければ、初期化後の変更を禁止できるため、不変オブジェクトの作成に便利です。
アクセス修飾子については『public / private / protected』、継承については『extends / implements』、トレイトについては『trait』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。