リスを倒す 『初めてのPHP,MySQL,JavaScript&CSS』

『初めてのPHP,MySQL,JavaScript&CSS』勉強奮闘記

5-4. PHPの関数とオブジェクト④PHPのオブジェクト続き

くそー今週で6章終わるはずが、オブジェクトで躓いてしまた。。。。そしてwifiが低速になってたっぽくて全然インターネットつながらなかた・・くそー。
8月はさらにスピードあげてリス以外にも色々進めていこう。

さて今回は5章ラストでございます。オブジェクトの続きをやりますー。

1.前回の復習


・オブジェクトとは「データ処理の集まり」
オブジェクト指向は、ページ数が増えていく際に処理をひとまとめにすることで処理を軽減し、コードミスを防げる
・クラスはある集合体に名前をつけたもの
・クラスの内部には処理(メソッド)とデータ(プロパティ)を定義するp
・オブジェクトは自律した動作ができ、オブジェクト間で互いにデータをやり取りすることもできる
・クラスを具体化しインスタンスを生成することで処理を実行する
・決められた手続き以外内部データにアクセスできない仕組みをカプセル化という
・定義は以下

<?php
class クラス名
{
public$変数=”文字列“;
public function関数名()
}
オブジェクト関数=newクラス
オブジェクト関数->メソッド();
?>

2.プロパティとメソッドのスコープ(有効範囲)


php5では、public、protected、privateという3つのキーワードをメソッドに指定すると、クラス外部からの参照や実行を制限できます。
どれを使用するかは以下を基準に決めます。

キーワード 基準
public 外部のコードからアクセスし、このクラスを拡張するクラスにも、その内部データを継承させる
protected 外部のコードからアクセスせず、このクラスを拡張するクラスにも、その内部データを継承させる(同じクラスのメソッドと継承されたクラスから参照可能)
private 外部のコードからアクセスせず、このクラスを拡張するクラスにも、その内部データを継承させない(同じクラスのメソッドからのみ参照可能)

3-1.クラスの継承


クラスを継承することで、他のクラスの内部データや手続きを引き継いで新たにクラスを作成できます。これにより面倒なコードの書き直しにかかる時間が大幅に減ります。
オブジェクト指向では、継承するクラスを「スーパークラス」、継承されるクラスを「サブクラス」と呼びます。

3-2.extend演算子


クラスを継承するには、extend演算子を使用します。

<?php
Class サブクラス名 extends スーパークラス
{処理記述

?>

以下のサンプルでは、extend演算子を使ってクラスSubscriberをUserクラスのサブクラスとして定義しています。


<?php
$object = new Subscriber;
$object->name = "Fred";
$object->password = "pword";
$object->phone = "012 345 6789";
$object->email = "fred@bloggs.com";
$object->display();

class User
{
public $name, $password;

function save_user()
{
echo "Save User code goes here";
}
}

class Subscriber extends User
{
public $name, $password;

function display()
{
echo "Name: " . $this->name . ;
echo "Pass: " . $this->password . ;
echo "Phone: " . $this->phone . ;
echo "Email: " . $this->email;
}
}
?>


結果はこう。
f:id:taro-blog2323:20160801010657p:plain

3-3.parent演算子


サブクラスで、その親(スーパークラス名)のメソッドと同じ名前のメソッドを記述すると、親クラスのステートメントをオーバーライド(無効)にしてしまいます。これをさせないためにはparent演算子を使用します。

<?php

$object = new Son;
$object->test();

class Dad
{
function test()
{
echo "[Class Dad] I am your Father";
}
}

class Son extends Dad
{
function test()
{
echo "[Class Son] I am Luke";
}

}
?>


[Class Dad]I am your fatherがでてきません。(サブクラスのみ生きる)
f:id:taro-blog2323:20160801010854p:plain

parent演算子を使いtest2で再定義します。


<?php
$object = new Son;
$object->test();
$object->test2();

class Dad
{
function test()
{
echo "[Class Dad] I am your Fathe";
}
}

class Son extends Dad
{
function test()
{
echo "[Class Son] I am Luke";
}

function test2()
{
parent::test();
}
}
?>


結果はこちら。
f:id:taro-blog2323:20160801011009p:plain

3-4.finalメソッド


サブクラスからスーパクラスのメソッドをオーバーライドさせないようにしたい場合は、functionやclassの前にfinalを記述します。
Finalキーワードを指定したクラスの継承やメソッドのオーバーライドをするとエラーメッセージがでます。

4.クラスを設計する


クラスを設計するときに以下の流れで考えていくというのを見つけたので、実践編になった際用でメモメモしました。
普段の仕事でも考え方は一緒かもなー。教えてもらった資料作りの原則でも目的とストーリーが大事って言ってたのも似てるかな。

①シナリオの分析
目的を定義して、それに合わせた簡単なシナリオを作る。ここからどのような情報や処理が必要か書き出してみる。

②操作の書き出し
実際の流れ(会員制のサイトをつくるなら、サイトに登録してもらってコンテンツを閲覧するまで)を箇条書きで書き出し

③必要な情報は何か
必要な情報(サイトに登録する内容)を洗い出し

④必要な処理は何か
ユーザーがどのような操作をするか、そのとき何が必要か想像しながら処理を書き出す


いじょー
次は6章です。6章はphpの配列です。前やったarrayってやつか。。。