Day 0・Laravelを読むための最低限PHP
クラスとオブジェクト — -> と :: の違い
クラス・オブジェクト・new・プロパティ・メソッド・$this・コンストラクタ・可視性・static・定数、そして初心者最大の壁「->」と「::」の違いを理解する。
クラスは「設計図」、オブジェクトは「その実物」
クラスとは「こういうデータと、こういう動作を持ったものを作る」という設計図です。そして、その設計図から実際に作り出した実物を「オブジェクト」または「インスタンス」と呼びます。たい焼きで例えるなら、金型がクラス、そこから焼き上がった1つ1つのたい焼きがオブジェクトです。設計図(クラス)は1つでも、実物(オブジェクト)はいくつも作れます。オブジェクトが持つ「データ」を「プロパティ」、「動作」を「メソッド」と呼びます。プロパティは変数、メソッドは関数の、クラスの中版だと考えてください。
<?php
class User
{
public $name; // プロパティ(このオブジェクトが持つデータ)
// メソッド(このオブジェクトができる動作)
public function hello()
{
// $this は「このオブジェクト自身」を指す
return "こんにちは " . $this->name . " さん";
}
}
// new でクラス(設計図)から実物(オブジェクト)を作る
$user = new User();
$user->name = "田中"; // -> でプロパティに値を入れる
echo $user->hello(); // -> でメソッドを呼ぶ → こんにちは 田中 さんなぜ $this が要るのか
メソッドの中から「このオブジェクト自身が持つプロパティ」を触りたいとき、単に $name と書くと「メソッド内のただの変数」と区別がつきません。$this->name と書くことで「今処理している、このオブジェクト自身の name プロパティ」だと明確に指し示せます。$this は「自分自身」を指す合言葉だと覚えてください。
コンストラクタ __construct — 生まれた瞬間の初期設定
<?php
// new した瞬間に自動で1回だけ呼ばれる特別なメソッドが「コンストラクタ」。
// 名前は必ず __construct(アンダースコア2つ)。作られたと同時に初期値をセットする。
class User
{
public $name;
// new User("田中") とした瞬間に自動で呼ばれる
public function __construct($name)
{
$this->name = $name; // 受け取った値を自分のプロパティに保存
}
}
$user = new User("田中"); // ここで __construct が動く
echo $user->name; // → 田中可視性(public / private / protected)
- public(公開):クラスの外からでも自由に触れる
- private(非公開):そのクラスの中からしか触れない。外に見せたくない内部データに使う
- protected(限定公開):そのクラス自身と、それを受け継いだクラス(継承先)からだけ触れる
最大の壁:「->」と「::」の違い
PHP初心者が最もつまずくのがこの2つの矢印です。結論から言うと、対象が「new して作った実物(オブジェクト)」か「クラスそのもの」かで使い分けます。「->」(アロー)は new で作った実物のプロパティやメソッドに使い(例: $user->name)、「::」(ダブルコロン、スコープ解決演算子)はクラスそのものに属する static メンバーや定数に使います(例: User::create()、User::MAX_AGE)。ここで「static(静的)」とは、実物を作らなくても「クラスそのものに属する」共有のメンバーのことで、「const」で定義する定数と同じく new せずに「::」で使えます。
「->」実物(オブジェクト)に対して使う
<?php
$user = new User("田中"); // まず new で実物を作る
echo $user->name; // 実物のプロパティ
echo $user->hello(); // 実物のメソッド
// $obj->method() = 「作った実物に対して」呼ぶ「::」クラスそのものに対して使う
<?php
echo User::MAX_AGE; // クラスの定数(new 不要)
$user = User::create(); // クラスの static メソッド(new 不要)
// Class::method() = 「クラスに対して直接」呼ぶ覚え方のコツ
「実物(オブジェクト)を作ってから触るなら ->」「実物を作らずクラスに直接触るなら ::」と覚えてください。$小文字の変数の後ろは大体「->」、先頭大文字のクラス名の後ろは大体「::」という見た目の目印も、最初のうちは役に立ちます。
Laravelではこう出てくる
Laravelのコードは「->」と「::」だらけです。下の例で両方の使い分けを見てください。Route や User(モデル)のように「クラス名::」で始まるものと、$user のように「実物->」で続くものが混在します。今日の区別ができれば、この行が読めます。
<?php
// User はクラス。:: でクラスに直接メソッドを呼び、1件取得する
$user = User::find(1);
// $user は取得できた「実物」。-> でプロパティやメソッドにアクセス
echo $user->name;
$user->save();
// Route もクラス。:: で get メソッドを呼ぶ
Route::get("/users", function () {
return User::all(); // User クラスに :: で all を呼ぶ
});読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
「$user->name」と「User::MAX_AGE」の違いとして正しいものはどれか。
オブジェクトを new した瞬間に自動で1回だけ呼ばれ、初期値をセットするのに使う特別なメソッドはどれか。
メソッドの中で使う「$this」とは何を指すか、なぜ必要かを説明してください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。