5-4. PHPの関数とオブジェクト④PHPのオブジェクト続き
くそー今週で6章終わるはずが、オブジェクトで躓いてしまた。。。。そしてwifiが低速になってたっぽくて全然インターネットつながらなかた・・くそー。
8月はさらにスピードあげてリス以外にも色々進めていこう。
さて今回は5章ラストでございます。オブジェクトの続きをやりますー。
1.前回の復習
2-1.プロパティとメソッドのスコープ(有効範囲)
3.クラスの継承
3-1.クラスの継承
3-2.extends演算子
3-3.parent演算子
3-4.finalメソッド
4.クラスを設計する
1.前回の復習
・オブジェクトとは「データ処理の集まり」
・オブジェクト指向は、ページ数が増えていく際に処理をひとまとめにすることで処理を軽減し、コードミスを防げる
・クラスはある集合体に名前をつけたもの
・クラスの内部には処理(メソッド)とデータ(プロパティ)を定義するp
・オブジェクトは自律した動作ができ、オブジェクト間で互いにデータをやり取りすることもできる
・クラスを具体化しインスタンスを生成することで処理を実行する
・決められた手続き以外内部データにアクセスできない仕組みをカプセル化という
・定義は以下
2.プロパティとメソッドのスコープ(有効範囲)
php5では、public、protected、privateという3つのキーワードをメソッドに指定すると、クラス外部からの参照や実行を制限できます。
どれを使用するかは以下を基準に決めます。
キーワード | 基準 |
---|---|
public | 外部のコードからアクセスし、このクラスを拡張するクラスにも、その内部データを継承させる |
protected | 外部のコードからアクセスせず、このクラスを拡張するクラスにも、その内部データを継承させる(同じクラスのメソッドと継承されたクラスから参照可能) |
private | 外部のコードからアクセスせず、このクラスを拡張するクラスにも、その内部データを継承させない(同じクラスのメソッドからのみ参照可能) |
3-1.クラスの継承
クラスを継承することで、他のクラスの内部データや手続きを引き継いで新たにクラスを作成できます。これにより面倒なコードの書き直しにかかる時間が大幅に減ります。
オブジェクト指向では、継承するクラスを「スーパークラス」、継承されるクラスを「サブクラス」と呼びます。
3-2.extend演算子
クラスを継承するには、extend演算子を使用します。
以下のサンプルでは、extend演算子を使ってクラスSubscriberをUserクラスのサブクラスとして定義しています。 class User function save_user() class Subscriber extends User function display()
<?php
$object = new Subscriber;
$object->name = "Fred";
$object->password = "pword";
$object->phone = "012 345 6789";
$object->email = "fred@bloggs.com";
$object->display();
{
public $name, $password;
{
echo "Save User code goes here";
}
}
{
public $name, $password;
{
echo "Name: " . $this->name . ;
echo "Pass: " . $this->password . ;
echo "Phone: " . $this->phone . ;
echo "Email: " . $this->email;
}
}
?>
結果はこう。
$object = new Son; class Dad class Son extends Dad }3-3.parent演算子
サブクラスで、その親(スーパークラス名)のメソッドと同じ名前のメソッドを記述すると、親クラスのステートメントをオーバーライド(無効)にしてしまいます。これをさせないためにはparent演算子を使用します。
<?php
$object->test();
{
function test()
{
echo "[Class Dad] I am your Father";
}
}
{
function test()
{
echo "[Class Son] I am Luke";
}
?>
[Class Dad]I am your fatherがでてきません。(サブクラスのみ生きる)
parent演算子を使いtest2で再定義します。 class Dad class Son extends Dad function test2()
<?php
$object = new Son;
$object->test();
$object->test2();
{
function test()
{
echo "[Class Dad] I am your Fathe";
}
}
{
function test()
{
echo "[Class Son] I am Luke";
}
{
parent::test();
}
}
?>
結果はこちら。
3-4.finalメソッド
サブクラスからスーパクラスのメソッドをオーバーライドさせないようにしたい場合は、functionやclassの前にfinalを記述します。
Finalキーワードを指定したクラスの継承やメソッドのオーバーライドをするとエラーメッセージがでます。
4.クラスを設計する
クラスを設計するときに以下の流れで考えていくというのを見つけたので、実践編になった際用でメモメモしました。
普段の仕事でも考え方は一緒かもなー。教えてもらった資料作りの原則でも目的とストーリーが大事って言ってたのも似てるかな。
①シナリオの分析
目的を定義して、それに合わせた簡単なシナリオを作る。ここからどのような情報や処理が必要か書き出してみる。
②操作の書き出し
実際の流れ(会員制のサイトをつくるなら、サイトに登録してもらってコンテンツを閲覧するまで)を箇条書きで書き出し
③必要な情報は何か
必要な情報(サイトに登録する内容)を洗い出し
④必要な処理は何か
ユーザーがどのような操作をするか、そのとき何が必要か想像しながら処理を書き出す
いじょー
次は6章です。6章はphpの配列です。前やったarrayってやつか。。。