こんにちは!
最近PHPでオブジェクト指向に関するカリキュラムを学習中なのでアウトプットしていきたいと思います。
オブジェクト指向
「ある役割を持ったモノ」ごとにクラスを分けて、モノとモノとの関連性を定義していくことでシステムを作り上げるシステム構成の考え方のことです。まあ考え方のことですね。
読んでてここのあなたの捉え方違う!!!!って思ったらガンガンコメントください。
クラスとインスタンス
私はクラスは「概念」だと捉えております。それに対してインスタンスは「概念」に紐つけられた実物かと。
例えば、呪術師という「概念」であるならば、伏黒恵や虎杖悠仁は呪術師という概念に紐つけられた実物。
漏瑚さんは呪霊という概念に紐つけられた実物や。
クラスには概念の中で定義される情報があります。
これをプロパティと言うんや。
呪術師クラスなら、「人間」「呪霊を祓う者」
呪霊クラスなら、「人間の負の感情の集合体」「呪力を持たない人間には見えない」
といった特徴があります。
これに加えて、メソッドというものもクラスの中に定義できます。
これは実際の動き、「できること」というイメージでいいです。
「攻撃する」「守る」「走る」といった機能です。
PHPを使ったオブジェクト指向
PHPではクラスの中で定義された「攻撃する」「守る」といったメソッドのことを関数と呼びます。
メソッドがあることで引数によって処理結果がそれぞれ異なります。
そう、同じクラスによって生成されたインスタンスでも引数によって異なったものが生み出すことが
できるのです。
<?php
class Magician{
private $magician = [];
function __construct($magician){
$this->magician = $magician;
}
public function getMagician(){
echo $this->magician;
}
public function addMagician($magic){
$this->magician .= $magic;
}
public static function getStaticMagician($str){
echo $str;
}
}
$shaman = new Magician('伏黒恵');
$shaman->getMagician();
echo '<br>';
$shaman->addMagician('十種影法術');
echo '<br>';
$shaman->getMagician();
echo '<br>';
Magician::getStaticMagician('呪術師');
echo '<br>';
?>
出力結果は以下の通りです。
オブジェクトをインスタンス化する時にnewで呼び出してオブジェクトの初期化をする__construct()
はRubyで言うところのinitialize
メソッドみたいなものなのかな?
あと、static修飾子は最初わかりにくかったけど、Rubyでクラス変数に当たる部分でクラスの中で共通化する変数ってことで認識は合ってるかな?
Rubyの復習もしつつPHPとの違いも学べているので、すごくいい経験をしているなと感じます。