• 締切済み

そもそもクラスってどう便利なんですか?

いつもお世話になってます。 根本的な質問をさせてください。 PHPでクラスってありますけど、これはどういう時に使うんでしょうか? functionで用が足りてしまうような気がするのですが、functionよりも便利なことがあるのでしょうか? クラス自体の記述方法や使い方はマニュアル等に書いてあるのですが、どういう時に使うべきなのかがわかりません。 上級者ほどよく使っているようで、記述もなんとなくプロっぽくかっこいいので使ってみたいと思っているんですが…。 初歩的で申し訳ありませんが、どなたかお教えください。

みんなの回答

  • rara_sun
  • ベストアンサー率50% (271/539)
回答No.2

クラスというのは、プログラミングのやり方論から来てます。プログラミング界では、「オブジェクト指向」という概念から来ています。 何がメリットがあるか? なんといっても再利用ができるところです。 function でも再利用はできますが、 そのメンテナンス(機能拡張など)のし易さが function と比べて優れています。 どう優れていうるか、1例をお話すると・・。 functionを使ってのプログラミング経験は長いでしょうか? 例えば、こういう経験はありませんか? ある1つの目的のために、沢山のfunctionをこしらえた事はありませんか? で、その目的が、開始から終了までの間のソースがやたら長くなったり、あっちこっちのサブルーチンにとんでいたり・・とか。 つもの目的のために作ったfunctionで、共通の引数が 必要になった場合、変数宣言ははじめにやりますが、 プログラムを作って、デバッグとかしていると、 あっちこっちに飛び火したその共通の引数が、うっとう しくなったこと・・ありませんか? オブジェクト指向では、それら変数やfunctionを1つのクラスとして扱う事ができます。 PHPでは、クラスを定義したものを使う時に $test = new クラス名; ってやります。そうすると、$test変数内に、クラスで定義した変数やfunctionが1つになって収まるわけです。 そうすると、そのクラス内のものを利用したい時には、 $testから呼び出してあげるので、扱いやすいのです。 具体的な例は、このURLを見て下さい。 http://www.studiofly.net:8080/?php/php113.html ただし、上手にクラスを作ってあげないと、せっかく作ったクラスが複雑なものになったりします。 上記ででてきた、オブジェクト指向という概念は、簡単とはいえないので、もう少し詳しく知りたいなら、”オブジェクト指向”のキーワードでネット検索してみてください。 沢山解説サイトがあります。 <PHPのクラス解説サイト> http://www.soi.wide.ad.jp/class/20020036/slides/15/14.html http://www.komonet.ne.jp/~php/chap10.htm http://oguchan.s4.xrea.com/language/php/learnphp1-9.html

miku0004
質問者

お礼

rara_sunさん、ご回答ありがとうございます。 > $test変数内に、クラスで定義した変数やfunctionが1つになって収まるわけです。 これ、ようやくなんとなく理解しました。 「これが何の意味があるの?」って感じだったのですが 、実際にプログラミングしていくときに、混乱しなくなりますね。 サイトの紹介もありがとうございました。 #多分自分でクラスを使ってみないと、見てもわからなかったかと思いますが、ようやく理解できました。 今後は取りあえず何でもかんでもクラスを使っていこうと思います(笑)。

全文を見る
すると、全ての回答が全文表示されます。
  • honiyon
  • ベストアンサー率37% (331/872)
回答No.1

こんにちは、honiyonです。  簡単にいってしまえばライブラリ集の進化版、でしょうか。  1つのプログラムには色んな目的の関数が含まれています。テレビに例えると、受信機、表示(ブラウン管)、チャンネルや電源の操作ボタンがあります。これらをまとめて1つの「TV」というプログラム(機械)になります。  それぞれ受信機や表示に対して2,3個のfunctionから構成されたとして、それぞれ担当部品が違うのに1つのファイルに混合して並んでいたら後々メンテナンスが大変だと思います。  これら1つの部品を構成するのに必要なふfunction集がクラス、といった形になります。1部品=1クラスとした方がまとまりがあります。  また1部品=1クラスとする事で汎用性が高まります。クラス同士のコミュニケーションを制限し、統一する事で汎用性が高まり、例えば「ビデオ」を作るときにTVで作成した「ボタン」という部品(クラス)を使いまわして効率的にビデオというプログラムを作れちゃったりします。  結局設計が悪ければクラスを使ったところで何のメリットも出てこないですしかえって難解なプログラムになったりしますが、どんどん肥大化するアプリケーションとプログラム量を効果的に管理し、修正し、再利用する為の考え方が「クラス」です。  BorlandのDelphiやC++Builderはクラスを効果的に使用して快適な開発環境を実現しているので、クラスを学ぶ上で良い環境かも知れません。  参考になれば幸いです(..

miku0004
質問者

お礼

honiyonさん、ご回答ありがとうございます! とりあえず簡単なプログラムをクラスを使って作り直して見ました。 大規模なプログラムではないので、汎用性というメリットを感じるまでには至りませんでしたが、プログラムの見た目上、確かにスッキリとまとめることが出来ました。 また、私が感じたメリットとしては、変数名の重複を気にすることなくfunction自体の開発をすることが出来る、ということでした。 ・・・何か間違ってますでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 外部ファイルのクラスのインスタンスが生成できない

    いつもお世話になっております。 PHP(Ver5.2)が利用できるレンタルサーバーを借りていろいろやっているのですが、 include_once した外部PHPファイルの中のクラス定義のコンストラクタがCallされません。 //外部クラスの記述 class A{ public function __construct(){ echo "OK"; } } //メインPHPの記述 include_once "xxx.php"; $obj = new A(); ↑におけるメインPHPをブラウザから呼び出したとき、本来なら OK とechoされるはずなのに、何も表示されません。 また、クラスAに定義したpublicなfunctionをCallしようとすると、定義されてないメソッドをCallした、とエラーになります。(インスタンス自体が生成されていない??) ファイル自体は正常にIncludeされていると思います。(ファイル名を間違ったらエラーになったから) ちなみに、クラスAの記述をメインPHPに記述すると、正常に動きます。 外部ファイルのクラスを正常に動かすにあたって、何かphp.iniあたりの編集が必要なのでしょうか? どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • クラスについて

    クラスについてご教示下さい。 ------------------------------ main.php ------------------------------ <?php include("./a.php"); include("./b.php"); ・ ・ ・ $a_class = new a; $b_class = new b; $b_class->view_sum; ・ ・ ・ ?> ------------------------------ a.php ------------------------------ <?php class a { VAR $int1 = 10; VAR $int2 = 5; function exec_sum(){ $int_sum = $int1 + $int2; return $int_sum } function XXXXXX(){ ・ ・ ・ } } ?> ------------------------------ b.php ------------------------------ <?php class b { function view_sum(){ ※クラスaのexec_sumを呼び出した結果を表示したい。 print ○○○; } function YYYYYY(){ ・ ・ ・ } } ?> ------------------------------------ として結果として15を表示したいと思っております。 ※あくまでの上記動作の可否を知りたいため、ロジックの構成については仕方なくです。。。すみません。 クラスを宣言するmain.phpではすでにclass_a, class_bで宣言していることが前提となります。 この場合、class_bから、class_aのfunctionを呼び出すにはどうすればよいのでしょうか? そもそも呼び出せるのでしょうか? お忙しいところ申し訳ありませんが、ご教示お願いいたします。

    • ベストアンサー
    • PHP
  • phpのマニュアルの質問です。

    phpのマニュアルの見方がいまいち分かりません。 http://www.php.net/manual/ja/function.fopen.php resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] ) 上記の例ですと、 ◎「string」「bool」これはどういう意味でしょうか?続くのが必ず変数なのはなぜでしょうか? ◎関数の中の引数の[ ]大カッコは何を意味してるでしょうか? 初歩的な質問ですが教えてください。

    • ベストアンサー
    • PHP
  • uasort()でクラスのメソッドは呼べますか?

    2次元連想配列の指定項目をソートするのに、uasort()を使いたいのですが、 uasort()で指定する関数に任意の引数は渡せず、固定の項目しかソートできません。 uasort($rensouArray,"comparar"); 関数ではなくクラスのメソッドが指定できば引数を渡せなくてもクラスのプロパティで渡せると思いましたが、 以下の書き方ではクラスのメソッドは呼べませんでした。 uasort($rensouArray,$this->$comparar()); http://jp.php.net/manual/ja/function.uasort.php の注意書きで、関数名の代わりに、オブジェクトへのリファレンスを格納した配列とメソッド名を指定することも出来ます。とありますが、書き方がわからず困っています。

    • 締切済み
    • PHP
  • (VC++.Net) クラスにクラスを属性として追加できるでしょうか?

    初歩的な質問ですみませんが、教えてください。 #include <string> class A { int x; int y; std::string strX; //↑stringクラスを使いたい。 //(charだったり上手くいく。) }; とやると実行自体(コンパイラーエラーがたくさんでますが・・)は出来るのですが、アクションを掛けたら、"ハンドルしていない例外が発生しました"というエラーが出てしまいます。(←あたりまえか) stringクラスに限ったことではないのですが、自作のクラスを、ほかの自作のクラスへメンバ変数?的に使用したいのですが、上手くできません。一つ二つのクラスを、ほかのクラスで使用するならば、継承すればよいのですが、一つのクラスが、たくさんのクラスを使用するような場合、どのように記述すればよいのでしょうか? どこを勉強すればよいのでしょうか? ご教授のほど、よろしくお願いいたします。m( _ _ )m

  • Rubyに、クラスメソッドというものがありますが、どういう時に使うので

    Rubyに、クラスメソッドというものがありますが、どういう時に使うのでしょうか?初歩的な質問で申し訳ありませんが、よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • コレクションクラスの使い分け方

    プログラミング初心者です。 コレクションクラスについて勉強中ですが、 1:ArrayListクラス(Listインターフェース) 2:HashSetクラス(Setインターフェース) 3:HashMapクラス(Mapインターフェース) 4:Vectorクラス 5:Iteratorインターフェース これらの違いがよく分かりません。 <質問1> 1と2の違いは、 1:順序付けて、重複オブジェクトを保持する 2:順不同で一意のオブジェクトを保持する というところまでは分かりました。 これらと3・4の違いって何でしょうか? <質問2> 5:ポインタを前後に動かすような感じで、保持したコレクションの中身を操作できる、 ということだと思いました。 1~4まででも、要素(インデックス)を指定しれやれば、中身を操作することはできると思うのですが、これを使ったほうがどのように便利なのでしょうか? 初歩的な質問で申し訳ありませんが、具体例などを示して教えていただければ助かります。 よろしくお願いします。

    • ベストアンサー
    • Java
  • PHPのアンインストール

    PHP初心者です。 WindowsXP-ProにPHPを入れています。 php-4.4.1をアンインストールしたいのですが・・・ 「プログラムの追加と削除」にもPHPは見当たらないし、マニュアル等にもないのですが、どのような手順でアンインストールすればいいのでしょうか。 初歩的なことですみません。。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • クラスの生成の仕方

    PHP Version 5.1.6を使っています。 よくクラスのオブジェクトを生成する時に「=&」で生成する記述を 多く見かけるのですが、自分はまだ「&」を付けることによる メリットがよく分からないので教えてもらえないでしょうか? また逆にデメリットなどもあるのでしょうか? 分かりやすい例などあったら是非知りたいです。 $obj1 = new Hoge() $obj2 =& new Hoge()

    • 締切済み
    • PHP
  • ユーザ定義関数の引数にクラスのインスタンスを渡すことは可能?

    いつもお世話になっております。 (PHP5.2.5) 質問: ユーザ定義関数の引数に、 「クラスのインスタンス」を渡すことは可能ですか? 例: <?php  //クラスをインスタンス化する。(例:PDOクラス)  $conn = new PDO($dsn,$user,$pass);  //ユーザ定義関数に上記のクラスのインスタンスを与えている  user_func($conn);  //ユーザ定義関数の定義部  function user_func($conn){   $sql = '~SQL文~';   $stmt = $conn->prepare($sql);   :   :処理   :  } ?> 関数に渡すことのできる引数の型について、 なかなか見つけられず、初歩的な質問をしてしまっているかもしれませんが、 どうぞ宜しくお願い致します。        

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • 用紙をセットしているのに「紙をセットしてください」のエラーになる
  • エプソン社製品での問題
  • !マークがオレンジ色に点滅する
回答を見る