PHP 基礎講座の備忘録(クラス、オブジェクト)
さて今回からPHPの基礎編としまして
PHPの基礎構文からPHPによる簡単なアプリケーションの作成までの口座を書き記し、自身の基盤となるように残しておきます
今回は基礎にして難関である
クラス変数とオブジェクトについての理解を深めていこうと思います
PHPはクラスベースでのオブジェクト指向を提供する言語となっているためここの理解は必須です
クラスというのは日本語で直訳されると「類」ということで
抽象的な例えで「人間」とか、「動物」や、「会社」など
そのものの概念的なことを指します
そしてオブジェクトというのはそのクラスの中での固有の物。
つまり「人間」というクラスの中出の「おジャコ」のような確かなものを指します
クラスという概念的な意味合いは難しいので、そのクラス(概念)がどのような意味合いを持つのかしっかりと定義するためにメモになど書き記すことも有効なようです
クラスを定義する際に何をコンピュータに入力するのかはつまり
- データ
- 振る舞い
を定義してあげることが大事です
先の概念的な話では「概念」としていましたが人によっては、
「設計図」という例えも適切です。
「人間」というモノがどのような要素を持ち、どのような行動をするのか
それらをその世界で定義してあげることです
それではクラスを定義していきます
class Human {
public $name;
protected $birthday;
private $gender;
}
定義の仕方はclassと書いた後に続けてキャメルケースでクラス名を書きます 今回は人間のヒューマンとしました。
そして「名前」「誕生日」「性別」のデータを持たせるべく書きましたがこの変数のことを、
「プロパティ」、「インスタンス変数」、「メンバー変数」、「フィールド」全て同じ意味でこのクラスの中のデータのことを指すので混乱しないようにします
変数の前についている宣言のことを
「アクセス修飾子」と言いますクラスの継承に深く関わる
protectedについては今回は使わないのでこちらはprivateに変更します
publicは外から参照できる変数
ということでpublicを指定した変数は外から参照したり代入したりすることが可能になります
privateは外から操作することが出来ない
こちらはパブリックの反対になります基本的にクラスを定義する際はこれを定義して理由がなければ外から参照、代入が出来ないようにしておきます
次にこのクラスの「振る舞い」を定義していきます
ややこしい書き方をしていますがこの「振る舞い」とは
「メソッド」と呼ばれつまりただの関数です。
public function walk() {
echo '歩きます<br>';
}
public function eat() {
echo '食べます'.PHP_EOL;
}
メソッドも定義する際はアクセス修飾子を指定します
普通に関数なので引数を指定することも出来ます
メソッドに関して重要なコンストラクタ
$human = new Human();
このnewを付けることでクラスのオブジェクトを生成し
生成したオブジェクトから値や関数を取り出すことが可能になります
「インスタンス」とも言われ、
クラスと言う実態のない概念から、実際に値を持ったオブジェクト(モノ)ということになりました
そしてその値の呼び出し方は、
$human->walk();
$human->eat();
のように矢印で呼び出すことが可能です
private $name;
private $birthday;
private $gender;
最初に定義したこちらの変数に値を入れていきます
こちらの代入の仕方は通常コンストラクタを使って代入します
コンストラクタはクラスを用意した時点で何も定義しなくてもデフォルトのコンストラクタというものが勝手に定義されているのですが
このコンストラクタはただ定義されているだけで何もしません。
これを上書きするメソッドを中で定義してあげます
class Human {
private $name;
private $birthday;
private $gender;
public function __construct($name, $birthday, $gender) {
$this->name = $name;
$this->birthday = $birthday;
$this->gender = $gender;
}
順番に説明します
$thisにはこれから生成されるコンストラクタのことが入っています
レシーバーと呼ばれる変数で自身のオブジェクトのことを指します。
つまりこれから引数にされる
$human = new Human(‘この部分になる‘,’お年頃’,’オス’);
生成されるコンストラクタの第一引数にclass Humanが持っているプロパティ$nameをそのまま代入するという意味になります
$birthday, $genderも同様で
コンストラクタを生成される際に引数を渡します
$human = new Human('おジャコ','お年頃','オス');
$thisはコンストラクタ自身なので、
public function walk() {
echo "{$this->name}は歩きます<br/>";
}
public function eat() {
echo "{$this->birthday}なのでたくさん食べます<br>";
}
のようにそのメソッドの中で使用し参照することが可能です
コメントをお待ちしております