06 オブジェクト指向の基礎
description
Transcript of 06 オブジェクト指向の基礎
PHP講座(6)!一歩上に行くためのオブジェクト指向
この授業では、現代的なプログラミングの中心的な概念であるオブジェクト指向について学びます。 PHPerとして上級者になるためには避けては通れない道です。
オブジェクト指向とは?
10.4.18 (C) 株式会社破滅派
2
オブジェクト指向とは、プログラミングのためのルールです。 プログラムの固まりをオブジェクト(物)ととらえ、お互いの相互作用がプログラム全体の動きになります。
オブジェクト
オブジェクト
オブジェクト
オブジェクト
オブジェクト指向プログラミングではないルールに手続き型プログラミングがあります。 これはみなさんがいままでやっていたプログラミングで、一連の処理を順番に行っていきます。
<?php
//アドレスを定義 $to = “[email protected]”; //件名を定義 $sub = “This is a test”; //本文を定義 $body = “Hello!”; //メールを送信 if(mail($to, $sub, $body)){ echo “メール送信成功”; }else{ echo “メール送信失敗”; }
?>
オブジェクト指向を車に例えると…(1)
10.4.18 (C) 株式会社破滅派
3
オブジェクト指向はそもそも機械工学の世界から誕生しました。 あらゆるものをオブジェクト(モノ)と考えます。
オブジェクト:タイヤ エンジンに伴って回転する
オブジェクト:ハンドル 回すことでタイヤの向きを変更する
オブジェクト:フレーム 車に必要なオブジェクトすべてを納めることができる
オブジェクト:アクセル 踏み込むことでエンジンを回転させる
オブジェクト:車 移動を便利にしてくれる乗り物
車が動くのは各部品(オブジェクト)が相互作用によって動いているからです。
オブジェクト指向を車に例えると…(2)
10.4.18 (C) 株式会社破滅派
4
オブジェクト指向においては、一つ一つのオブジェクトの機能はそのオブジェクト自身だけが知っています。外部のオブジェクトはその詳細を知らなくても利用することができます。これをオブジェクトの「隠蔽性」または「カプセル化」といいます。
自動車期間工は自動車を作ります。 しかし、エンジンは作りませんし、エンジンがどのような仕組みで動いているかも知る必要がありません。 タイヤのゴムをどうやって確保するかも知る必要がありません。 それでも車を完成させることができます。
大規模で複雑な物を作るのに、オブジェクト指向の知識は不可欠です。
オブジェクトを車にたとえると..
10.4.18 (C) 株式会社破滅派
5
インスタンス:$MyCar
クラスはオブジェクトを作るための設計図。 設計図からオブジェクトを作ることを「インスタンス化」といいます。
インスタンスとは、「実体」という意味です。
クラス:Car
<?php
$MyCar = new Car(); ?>
new演算子でCarクラスの新しいインスタンスを作成し、変数$myCarという名前をつけています。
変数と関数の復習
10.4.18 (C) 株式会社破滅派
6
皆さんはすでにPHPで重要な2つのもの「変数」と「関数」を学びました。
変数…値につける名前
$hoge = “fuga”; $num = 10; $myArr = array(1, 2, 3, 4);
関数…一連の処理につける名前
function tenTimes($num){ return $num * 10;
}
PHPにおけるオブジェクトはこの変数と関数の集合体です。 この集合体の設計図を「クラス」と呼びます。
設計図(クラス)の書き方
10.4.18 (C) 株式会社破滅派
7
クラスにはプロパティ(部品)とメソッド(機能)があります。 プロパティは変数で、メソッドは関数です。
クラス:Car 部品:ブレーキ、ハンドル、
アクセル、エンジン 機能:進む、止まる、曲がる、
バックする、エンジンをかける
<?php class Car{
//プロパティ var $handle; var $break; var $accel; var $engine;
//メソッド function go(){} function stop(){} function turn($direction){} function engine_start(){}
} ?>
クラスの使い方
10.4.18 (C) 株式会社破滅派
8
<?php //クラスファイルを読み込む //通常は1つのクラスで1つのファイルに分けます require_once(“./Car.php”);
//インスタンス化して使えるようにする $myCar = new Car();
//矢印演算子でプロパティを呼び出す echo $myCar-‐>price; //1,000,000
//メソッドは括弧を付ける $myCar-‐>back(); //バックします ?>
クラスは自分で作った物であったり、他人が作ったものだったりします。 通常は1クラス1ファイルとし、読み込んで使います。
index.php Car.php
index.phpはCar.phpを読み込んでそれを利用します。 この場合、Carクラスの機能を利用するだけなので、何かエラーが起きた場合はindex.phpに不具合があると考えることができます。 こうしてプログラムの隠蔽性が保たれます。
オブジェクト指向はどこまで理解する必要があるか?
10.4.18 (C) 株式会社破滅派
9
オブジェクト指向を理解していないとできないこと • WordPressやXoopsなどのカスタマイズ • CakePHPなどのフレームワークの利用 • 複雑で高度なシステムの作成
会社の経理部で働くか? 公認会計士になるか? …という違いに似ています
オブジェクト指向は抽象的な概念であり、理解が難しいです。 単純なメールフォームならオブジェクト指向でなくても作れます。
しかし、理解しないとできないこともあります。