PHPのクラスはCとかなんかよりは全然面倒じゃなくていいです。でも継承とかオーバーライドとかにいろいろと制限があるそうです。
クラスは何だか抽象度が高すぎて最初は非常に面倒に感じます。しかし、アプリケーションなどがより大規模になってゆくにつれて便利さがわかってきてなかなかいい感じになります。実際大規模にならないとあんまり意味はないかもしれません。特にこのSampleに至ってはまったく意味がありません。しかし練習なので勘弁してください。
クラスとは何か?という話になるんですが、実にその抽象度の話なのです。違う角度から説明するので間違いだらけではあるんですが、ツリー構造と抽象度、または分業とそのコミュニケーションという全体の構造を制御する機能といいますか概念です。
例えばあなたがプラモデルで自動車を作るとします。部屋の床にプラモデルを広げて一人で作るのが通常の風景だと思います。組み立て方の説明書を読みながら一人で黙々と組み立てるわけです。透明なプラスティックはガラス面に、タイヤには小さなゴムを履かせたり、ちょっと凝ったものになると四輪駆動でモーターを仕込んだりと。しかし、この組み立ての風景は実にオブジェクト指向じゃないんです。だいたいが一人の作業であって大人にもなれば似たようなパーツがあっても勘違いして間違ったまま組み立ててしまうようなこともありません。通常PHPを使ってHTMLに簡単な機能の拡張を行うような仕草がオブジェクト指向じゃないPHPの使い方です。
しかしながら、一台の本当の自動車を作ることを考えて見てください。プラモデルじゃなくて本物です。と想像すると途方もない感じがしませんか?何一つ技術のない人間にとって自動車一台、本物を作ることにどれだけの苦労があることか。私自身のことで本物の自動車を作ると考えるとアプローチできる箇所があります。それは、単純な組み立て作業の一部を担うことです。
オブジェクトの考え方はここら辺りが肝です。まずエンジンを作る方々がおられるとします。エンジンは設計からして専門技術を要しますが、その実際の生産に関してもかなりの専門技術と設備が必要です。それは我々の想像に足ります。タイヤを作る人もいます。タイヤはホイールとゴムタイヤ、またホイールをつなぐ軸を生産する人もいます。いったい全体どういう技術と設備でどんな人が作っているのかわからないわけですが、どれもこれも設計どおりにちゃんと生産されちゃうわけです。この「ちゃんと生産されちゃうそのモノ」の感じがオブジェクトです。設計通り生産されてしまったモノ(オブジェクト)は、「はい、こことここをビスで留めて、ここんところをあっちに繋いで...」と指定どおり他の部品とつなぐとちゃんと機能するわけです。そしてもしかしたらこのモノはそのまま他でも流用できるかもしれません。
この話をプログラムに当ててみると、クラスというのはある抽象化された機能のカテゴリーだと言えます。例えば自動車中のエンジンというカテゴリーすなわちクラスは、気筒やピストンやクランクや排気弁やプラグや...という様々なものがきちんと組みあがったオブジェクトです。このエンジンは具体的な部品を寄せ集めた抽象的な物体であって、尚且つ必ずやタイヤとは区別されます。抽象度が高いわりにきちんと区別されるという人間の思考のなせる技がオブジェクトということになります。
さて、メンバ変数とかプロパティーといったものがここではどういうものになるのかというと、このエンジンの具体的な仕様ということになります。どんな点火プラグを使って、どれだけの密閉された空間で爆発させ、どれだけの圧力をピストンが受けて、それだけの上下運動を回転運動に変えるか...というようなそれぞれの部品の仕様です。そしてメソッドは、エンジンそのものの機能...つまり生産された動力そのものです。動力がReturnして来ないと意味ないですし。
じゃ、引数(パラメーター)は何かというと、ガソリンと空気(酸素)だと思います。それをエンジンの中に与えてやって、各メンバ変数とかプロパティーというもので定義された要因によってエンジンその物が機能(Function)して動力として使えるものになって返ってくるというわけです。
クラスは何だか抽象度が高すぎて最初は非常に面倒に感じます。しかし、アプリケーションなどがより大規模になってゆくにつれて便利さがわかってきてなかなかいい感じになります。実際大規模にならないとあんまり意味はないかもしれません。特にこのSampleに至ってはまったく意味がありません。しかし練習なので勘弁してください。
<?耳にタコができるほどクラスとかメンバ変数とか、メソッドとかプロパティーとかいろいろ説明がありますのでここでは割愛。あまり説明されていない角度で説明します。
class Edo {
var $man1 = "ninja";
var $man2 = "samurai";
var $man3 = "hyakusho";
function Buki($thing) {
$a = $this->man2." + ".$thing;
echo $a;
}
}
$obj = new Edo();
echo $obj->man2;
echo "<br />";
$re = $obj->Buki("katana");
print $re;
?>
クラスとは何か?という話になるんですが、実にその抽象度の話なのです。違う角度から説明するので間違いだらけではあるんですが、ツリー構造と抽象度、または分業とそのコミュニケーションという全体の構造を制御する機能といいますか概念です。
例えばあなたがプラモデルで自動車を作るとします。部屋の床にプラモデルを広げて一人で作るのが通常の風景だと思います。組み立て方の説明書を読みながら一人で黙々と組み立てるわけです。透明なプラスティックはガラス面に、タイヤには小さなゴムを履かせたり、ちょっと凝ったものになると四輪駆動でモーターを仕込んだりと。しかし、この組み立ての風景は実にオブジェクト指向じゃないんです。だいたいが一人の作業であって大人にもなれば似たようなパーツがあっても勘違いして間違ったまま組み立ててしまうようなこともありません。通常PHPを使ってHTMLに簡単な機能の拡張を行うような仕草がオブジェクト指向じゃないPHPの使い方です。
しかしながら、一台の本当の自動車を作ることを考えて見てください。プラモデルじゃなくて本物です。と想像すると途方もない感じがしませんか?何一つ技術のない人間にとって自動車一台、本物を作ることにどれだけの苦労があることか。私自身のことで本物の自動車を作ると考えるとアプローチできる箇所があります。それは、単純な組み立て作業の一部を担うことです。
オブジェクトの考え方はここら辺りが肝です。まずエンジンを作る方々がおられるとします。エンジンは設計からして専門技術を要しますが、その実際の生産に関してもかなりの専門技術と設備が必要です。それは我々の想像に足ります。タイヤを作る人もいます。タイヤはホイールとゴムタイヤ、またホイールをつなぐ軸を生産する人もいます。いったい全体どういう技術と設備でどんな人が作っているのかわからないわけですが、どれもこれも設計どおりにちゃんと生産されちゃうわけです。この「ちゃんと生産されちゃうそのモノ」の感じがオブジェクトです。設計通り生産されてしまったモノ(オブジェクト)は、「はい、こことここをビスで留めて、ここんところをあっちに繋いで...」と指定どおり他の部品とつなぐとちゃんと機能するわけです。そしてもしかしたらこのモノはそのまま他でも流用できるかもしれません。
この話をプログラムに当ててみると、クラスというのはある抽象化された機能のカテゴリーだと言えます。例えば自動車中のエンジンというカテゴリーすなわちクラスは、気筒やピストンやクランクや排気弁やプラグや...という様々なものがきちんと組みあがったオブジェクトです。このエンジンは具体的な部品を寄せ集めた抽象的な物体であって、尚且つ必ずやタイヤとは区別されます。抽象度が高いわりにきちんと区別されるという人間の思考のなせる技がオブジェクトということになります。
さて、メンバ変数とかプロパティーといったものがここではどういうものになるのかというと、このエンジンの具体的な仕様ということになります。どんな点火プラグを使って、どれだけの密閉された空間で爆発させ、どれだけの圧力をピストンが受けて、それだけの上下運動を回転運動に変えるか...というようなそれぞれの部品の仕様です。そしてメソッドは、エンジンそのものの機能...つまり生産された動力そのものです。動力がReturnして来ないと意味ないですし。
じゃ、引数(パラメーター)は何かというと、ガソリンと空気(酸素)だと思います。それをエンジンの中に与えてやって、各メンバ変数とかプロパティーというもので定義された要因によってエンジンその物が機能(Function)して動力として使えるものになって返ってくるというわけです。



