クラスと関数群の使い方

このQ&Aのポイント
  • PHPを使ったWEBアプリケーション開発でのクラスと関数群の使い方について悩んでいます。
  • クラスを使った処理はすっきりまとまる一方で、共通の処理をどのように扱うかが課題です。
  • 関数群をまとめたファイルを作るか、共通処理をまとめたクラスを作ってインスタンスを作るか迷っています。
回答を見る
  • ベストアンサー

クラスと関数群のうまい使い方

今、クラスを使ってPHP(今はPHP4を使っています)によるWEBアプリケーション(といっても、そんなに大げさなものではないですが)を作成しながら、クラスの使い方を勉強しています。 ある程度クラスを使うことには慣れてきたのですが、悩んでいることがあります。 今までは、別ファイルによく使う関数群をまとめて、呼び出す形でやっていました。 それを、クラスを使ってやるようになってから、それぞれのオブジェクトでの処理はそのクラスにまとめることで、すっきりとなりました。 が、全てのクラス(もしくはいくつかのクラス)で共通して使用する処理(文字列操作など)はどうすればいいのかと悩んでいます。 それぞれのクラスに同じ処理を書くのは、クラスを使う意味がない気がするので、避けるべきだと考えていています。 そこで、今までのように共通の処理を関数群にして、クラスファイルでインクルードして使うか、共通処理をもつクラスを作って使用するクラスの中でインスタンスを作成して処理関数を呼び出すか・・・とどちらがいいのでしょうか? ただ、関数群をまとめたファイルを作ると、他にクラスを使う意味がないような気もするし、共通処理をまとめたクラスを作ってその処理を利用するクラスでインスタンスを作るのは、処理的に重くなりそうでまたクラスの本来の意味からすると共通処理をまとめたクラスというのがおかしい気もするし。 根本的にクラスの作り方がまずいのかもしれませんが、良いアドバイス等あればご指摘下さい。 長文になりましたが、よろしくお願いいたします。 追伸) PHPでのクラスの学習についていい本やサイトなどあればそちらもお教え願えればと思います。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • togix
  • ベストアンサー率50% (3/6)
回答No.1

関数群がどんなものかわからないのでなんともいえませんが、どのクラスでも共通で使う処理があるのでしたら その関数を行うクラスを1つ作って、そのほかのクラスはそれを継承する形にすればいいのではないでしょうか? それとも関数はクラスからだけではなくて、いわゆる関数としても使いたいというものでしたら関数群のファイルを作ってインクルードするがいいかも知れません。

qoozy257
質問者

お礼

アドバイスありがとうございます。 参考にさせていただき、どちらがいいか検討してみたいと思います。

関連するQ&A

  • クラス内のメンバ関数から他クラスのメンバ関数を利用

    PHP 5.3.8で、 MySQLデータベースに関する処理をする Database クラスと、ファイルのアップロード処理をする FileUpload クラスがあったとして、ファイルのアップロードが完了したら、そのファイル名をデータベースに書き込む処理をしたいと思っています。 思いつく方法としては、FileUpload クラスの関数内で逐一Databaseクラスをインスタンス化するか、予めインスタンス化したものをグローバル変数として利用するか、Databaseに対するサブクラスとしてFileUploadをextendsするなどがあるとは思いますが、どういうやり方をすれば綺麗にまとまるのか教えて下さい。 あまりクラスに関する知識がないので一般的にどうするかがよくわかっていない状態です。

    • ベストアンサー
    • PHP
  • クラスの分割

    画像処理のプログラムを書いているのですが、1つのクラスに必要な変数と関数をぶち込んだため、変数20~、関数20~、2000行くらいのクラスになっています。 このままでは見辛いので、クラスを処理ごとに分割して見易くしたいのですが、各関数でいくつか共通の変数を使用しているため上手く分割ができなくて困っています。 データのみのクラスを継承した子クラスを3つ作ってみたらインスタンスが3つできてしまい意味がありませんでした。 ↓の図に示すようなクラスを作りたいのですが、いくつか質問をさせてください       共通データクラス     /    |    \   子クラスA 子クラスB 子クラスC 1、変数20~、関数20~、2000行くらいのクラスは普通でしょうか?(分割する必要がありますか?) 2、↑の図はクラスの作り方として問題がありますか? 3、2で問題がない場合実現する方法として、仮想継承、関数に共通データのポインタを渡す以外に方法があるかどうか まだまだC++を勉強中で、便利な構造体程度にしか使えていませんが、どなたかご教授お願いします。

  • PHP5でクラスを作成しています。

    PHP5でクラスを作成しています。 コンストラクタの段階で論理エラーにしたくて、インスタンス値をnullにしたいです。 つまり直ちにプログラムを止めずに、クラスの生成(インスタンス化)を失敗させる 方法を__construct()関数内でどのように書けば良いのでしょうか? class Sample { function __construct() { // この中で処理の異常が発生! // インスタンス作成を失敗させる or インスタンス値をヌルにする。 //? //?どのように書けば?? //? } } $a = new Sample(); if ($a === null) { printf("正しくインスタンスの生成ができませんでした。"); } よろしくお願いします。

    • 締切済み
    • 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
  • 関数の組み込み。

    PHPでの関数の組み込みの質問です。 自作の関数を集めたPHPファイル"common_function.php"を製作し、 それぞれの処理の頭でこの関数ファイルをinclude_onceを使って 読み込んでいるという形式で処理を行っています。 include_once("../common/common_function.php"); この処理を行わずにこの関数ファイルををデフォルトで読み込む ようにPHPの設定に組みこむ事はできないのでしょうか? よい方法があれば宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHP 設定ファイルとユーザ定義関数

    ある機能を満たすためのライブラリ(lib.php)を作成しました。 このlib.phpはユーザ定義関数の寄せ集めです。 それぞれのユーザ定義関数では、設定ファイル(config.php)に記述されている共通変数を利用します。 このconfig.phpなのですが、ユーザ定義関数ごとにincludeする以外の方法はあるでしょうか? lib.php function one() { $hensu1... $hensu2... ...処理; } function two() { $hensu1... ...処理; } .... config.php $hensu1 = 1; $hensu2 = 2; ... という構成です。 function one,function twoでconfig.phpの変数を利用したいのですが、lib.phpの先頭でinclude "config.php"をしてもfunctionの中では変数のスコープが有効にはならず、 lib.php function one() { include "config.php"; ...処理; } function two() { include "config.php"; ...処理; } としています。 PHP5を使用しています。 function one() { global $hensu1... } としたらよいのでしょうか? どなたかアドバイスいただけますと幸いです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ユーザー定義関数とクラスの違いとは?

    間違えて違うカテゴリーに質問してしまったので、 そちらを削除して、質問させていただきます(レスも幸いなかったため)。 PHPを勉強して1ヶ月の初心者です。 ホームページを作ろうとして、本に書いてあったプログラムを元に、 付け足したり、削ったりしていました。 そして、プログラムが長くなってきたので、外部ファイルに処理を分割してみました。 どの本にも、「クラス」「オブジェクト指向」という言葉が強調されていたので、 とりあえずクラスにしてみました。 しかし、クラスの中で処理をした変数を取り出すのが手間に感じます (クラス内では「$this->変数名」、クラス外では「$クラス名->変数名」と書く手間が・・・)。 本の中には、クラスを使わずに、 ユーザー定義関数のみのfunctionをまとめた外部ファイルを 作成している例が多い気がします。 そこで質問なのですが、 処理を分割して外部ファイルにするとき、 「メソッドをまとめたクラス」にした方がいいのでしょうか? それとも、「ユーザー定義関数をまとめたもの」にした方がいいのでしょうか? また、「こうゆう場合は、クラスにした方がいい」「ユーザー定義関数にした方がいい」などの 条件がありましたら、教えていただきたいです。 本やネットを調べても、使い分けについて書かれているページがなく、 今後の作成のためにも、ぜひ知っておきたいです。 すべてクラスにした方が今後よいようでしたら、全部クラスのままで作れるよう、 慣れていきたいとも思ってもいます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 複数クラスで共通の関数、変数の呼び出し方

    お世話になります。 質問させて頂きたいことは 複数のクラスで共通して使われる関数、変数があった場合、その関数、変数は私の中で次の2通りの方法が思い当たったのですがどちらのほうがメモリ等の使用からよいのでしょうか? 1つめは あるヘッダファイル****.hを作成し、その中で関数を宣言し、変数はそのヘッダファイルのソースファイル中のグローバル変数とする。 2つめは クラスを作成し、静的メンバ関数、静的メンバ変数とする。 ネット等で拝見すると、あまりグローバル変数というのはよく見られていないようなので2つめの方がいいのかなと思っているのですが、静的メンバを今まで使ったことがないので、このような用途に使われるべきなのかも正直わかっていません。 検討外れのことを言っているのかもしれませんが、教えて頂ければと思っております。宜しくお願い致します。

  • クラスが使えない。

    こんにちは。 PHPで、次のコードを使い、 クラスを使おうと思っていますが、 うまくいきません。 <?php echo "練習です!"; class mylesson{ public function ee(){ echo "erer"; } } $ob=new mylesson; $ob->ee(); ?> 練習です!のみ表示され、ererは 表示されません。 何がいけないのでしょうか。 よろしくお願いします。 また、別ファイルのクラスファイルを作りたいのですが、 この場合、include関数で、クラスファイルを 読み込めばいいのでしょうか。 追加ですいませんが、何かわかれば、お願いします。

    • ベストアンサー
    • PHP
  • クラス構造と継承のありかた?

    PHP初心者で勉強中の者です。 多少、長文気味ですがアドバイス頂けると幸いです。 環境は、レンタルサーバで、php ver 5.2、MySQL ver 5.0、ブラウザ IE8(最新ver) 質問1 : index.php上で以下の処理を毎回(webにアクセスするたび)行っています。    1.require_once で各phpファイルを読み込み(全てクラスファイル)    2.new で読み込んだクラスをインスタンス化    3.自作関数を実行(動的なhtmlを出力)   この様な繰り返し処理は、webプログラミングとして典型的なのでしょうか。   webによっては機能(メールやプロフィール)毎にindex.phpを設けているとも聞いています。 質問2 : 質問1の2や3で必要なクラスオブジェクトを引数として渡している現状ですが、これを効率化(引数の省略)させようと、セッション(serialize、unserialize)へと移行中です。勉強不足であり今ひとつ実装出来ていませんが、共通変数を設けて使い回す構造(最上位クラスのpublic変数に格納?)とどちらが現実的でしょうか。 以上、お願いします。

    • 締切済み
    • PHP

専門家に質問してみよう