前提
PHPに関してです(特にJavascriptは異なります)
細かなことはいったん省き、考え方に個人的な線引きをしておきたい
変数、関数、プロパティ、メソッドの表記の使い分けはこの記事の本質から逸れるため、わかり易く日本語の「変数」「関数」で統一しています
人によって異なる部分は多いと思いますので他の記事で補完してください m(_ _)m
対象
- クラスとインスタンスはなんとなくわかるが(この記事では詳細な説明は省くため)、結局
オブジェクトやオブジェクト指向ってなんだっけ?
ともやもやしている方
まず"オブジェクト"の定義
定義
よくみかける「変数と関数の集合体」という表現が誤解を生んでいると思う。
これでは以下もオブジェクトということになるが、これはオブジェクトでは無い。
※ ただの変数と関数が1つずつあるだけである。
$name = '田中太郎';
function printName($name)
{
echo 'こんにちは、' . $name;
}
//実行: printName();
//結果: こんにちは、田中太郎
誤解を生まない表現としては以下3点をクリアしている必要がある。
①変数と関数がグルーピング
されており、②必ずグループ名がある
。
また③グルーピングするための書き方は言語によって決まった書き方がある
。
ではオブジェクトとは
①②③を適応してオブジェクト化していく。
class グループ名 //←②グループ名
{ //←①(グルーピングの始まり)
private $name; // ←③(グルーピング内での変数の書き方)
public function __counstruct($name) // ←③(グルーピング内での関数の書き方)
{
$this->name = $name;
}
public function printName() // ←③(グルーピング内での関数の書き方)
{
echo 'こんにちは、' . $this->name;
}
} //←①(グルーピングの終わり)
//実行:
//$インスタンス名 = new グループ名('田中太郎');
//$インスタンス名->printName();
//結果:
こんにちは、田中太郎
これはPHPの場合です。
※Javascriptでは書き方は変わるが大抵の場合は①②③はクリアしている。
要は、プログラミング言語ごとに区切って考えれば何がオブジェクトで何がオブジェクトでは無いかは明確に説明できるため、まずはオブジェクトに関しては曖昧な状態から脱却できる。
オブジェクトとは「変数と関数をひとまとめにしたクラスを作るプログラミングの手法」
オブジェクトという表現は極力避ける
まずPHPを書いていてオブジェクトは出てこない。
①②③の定義を元にグルーピングしたデータが一切出てこないと言うわけではなく、ご存知の通り表現がclass(=オブジェクト)とinstance(=オブジェクト)
のどちらかを使う。そのため、曖昧な認識から脱却するためには「オブジェクト」という曖昧な表現は極力避けると混乱しにくい。
結局オブジェクト指向とは
特に初学者向けの記事や質問に多いがこれは人に聞かない方がいいと思う、なぜなら人によって説明の仕方が違い余計混乱するからだ。
ただ、あえていうならたくさんのオブジェクトがあるシステム
、そしてclassとinstanceを使えば理解していることと同じ
だよー。これで十分なのではないかと思った。
メモ
PHP
連想配列 ≠ オブジェクト
https://coinbaby8.com/different-between-object-and-array.html
Javascript
連想配列 = オブジェクト
https://qiita.com/zero_046/items/19488a1a190edb7307b9#%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88object