PHP
オブジェクト指向

【PHP】オブジェクト指向を学ぶ[その1]


オブジェクト指向

オブジェクト指向を学ぶために軽い自己紹介するコードを作ってみます。

まず

・class設計・・・設計図

・インスタンス ・・・もの

と言う考えを念頭におきます。


コード


index.php

<?php

//クラス定義
class Self_Introduction{

// プロパティー
// 変数定義
private $name;
private $age;

// インスタンスが生成されると同時に処理が走る
public function __construct($name, $age){
$this->name = $name;
$this->age = $age;
}

// メソッド
public function hello(){
echo "私の名前は{$this->name}です。<br>年齢は{$this->age}才です。";
}

}

// インスタンス生成
$user = new Self_Introduction("太郎", "35");

// メソッド呼び出し
echo $user->hello();

// 結果
// 私の名前は太郎です。
// 年齢は35才です。


classの中には、定数や変数そして関数 ("メソッド" といいます) を含めることができます。


解説

まずclassを定義します。

class名の一文字目は大文字にする習わしがあるみたいです。

このclassの中で変数を定義したりconstructを書いたりメソッドを書いたりします。

そして、$user = new class名(引数);とすることでclassを使うインスタンスと言うものを生成し、メソッドを呼び出すことで一連の流れは終了です。


インスタンス生成で何が起きているか

$user = new Self_Introduction("太郎", "35");この部分で何が起きているのか。

インスタンスが生成されると同時にclass内の__construct()に処理が走ります。

すると、インスタンスが生成された時の引数「("太郎", "35")」が__construct()で処理されます。


メソッド呼び出し

echo $user->hello();最後にメソッドを呼び出します。

$userはclass Self_Introductionを使ったインスタンスです。

Self_Introductionの中のhello();メソッドを使用しますと言った意味合いが近いと思います。

そして、メソッドに処理が走る結果として、自己紹介が行われると言った流れになります。


アクセス権について

3つのアクセス権があります。

public・・・どこからでもアクセス可能

private・・・クラスとサブクラスからアクセス可能

proected・・・クラスからアクセス可能

こちらを踏まえて以下のコードを見てみます。


index.php

class Access{

public $public = "publicです";
private $private = "privateです";
protected $protected = "protectedです";

function accessHello(){
echo $this->public;
echo $this->private;
echo $this->protected;
}
}

$hoge = new Access();
echo $hoge->public; //publicです
echo $hoge->private; //出力されません
echo $hoge->protected; //出力されません
$hoge->accessHello(); //publicですprivateですprotectedですと出力されます


実際インスタンスを生成してアクセスしてみるとこのような結果になります。

privateとpritectesdは外部からはアクセスできないので出力はされません。

ですがaccessHello()はどうでしょうか?

全てが表示されています。

どう言うことかというとprivateでもprotectedでも同じクラス内のメソッドの中で処理が書かれています。

そして、メソッド自体のアクセス権は何も記されていないのでpublicです。

なので外部でaccessHello()と呼び出すとクラス内で処理された結果が呼び出されるので、privateでもprotectedでも出力されるんですね。

次回はセッター、ゲッターについて書きます。

※何か間違っていること、これも覚えておいた方がいいと言うことがあれば是非教えてください