phpのプログラムをオブジェクト指向で書こうと思ったのですが、クラス間のデータのやり取りのあたりでつまづきました。
クラスはそれぞれ
1.設定用
2.データの読み書き用
3.入出力用
4.データ処理用
5.メイン
です。
オブジェクト指向で書く前よりはコードも見やすくなったのですが、例えば4のデータ処理のところからは1、2、3の全てのプロパティを参照していたりして、なんだか複雑に。
オブジェクト指向で検索するとwikipediaには
プログラムを構成するコードとデータのうちコードについては手続きや関数といった仕組みを基礎に整理され、その構成単位をブラックボックス とすることで再利用性を向上し、部品化を推進する仕組みが提唱され構造化プログラミング (structured programming) として1967年にエドガー・ダイクストラ (Edsger Wybe Dijkstra) らによってまとめあげられた
と書いてありました。これだと関数を種類ごとにまとめただけであまり部品化はされておらず、前と変わらないような気がしてしまって・・・
例えば設定用のクラスはのプロパティほとんどすべての所で値が必要になるのですが、毎回newを使うのは気が引けるので、クラスの外で new でインスタンス化して必要なところから毎回 global で呼び出したりしているんですが・・・使い方が間違っている気がするのですが、そういったことを解説しているサイトが見当たらなかったため、全く分からない状態です。そもそもこの場合、設定用の値はクラスにまとめるべきなのかどうか・・・。
書く時は$クラスー>メンバ変数 とか $クラスー>メンバ関数 のように書くので今何をしているのかが分かりやすく、それは便利だと思うのですが。
すみません。自分でも上手く説明できずによくわからない文章になってしまいましたが、結局の所オブジェクトがどんな物でどんな書き方をすれば良いかが分かっていないのだと思います。そういった所を分かりやすく教えてください。お願いします。
No.3ベストアンサー
- 回答日時:
一人だと「クラスを使う人」と「クラスを作る人」に上手に頭を切替える必要があって、その辺で混乱しているのかも…。
方法として、各クラスを書いてメイン処理を書くのではなく、逆にまずクラスを使う人の立場で、こんな関数があったら便利だな、という感じで メイン(クラスを使う方)から書いてゆき、実際のクラスや関数は後で実装する(クラスを作る人になる)というのも手です。
また「クラスを作る人」になったときは「いつかフリー配布して皆に使ってもらう」ようなつもりで書けば、必要なメンバ変数や関数が見えてくるかも知れません。globalが必要になることもないはずです。
※最初は自己流でよいので「 UML 」のクラス図を書き出して、一度整理して全体の構造を見直すことをお勧めします。
>設定用の値はクラスにまとめるべきなのかどうか・・・。
あまりピンと来ません。例えば、多言語対応とかで言語によって各種設定が変わるなら分かりますが…。普通に設定ファイルを読み込んで、各クラス・オブジェクトへ必要な値を渡し、取得した結果や生成されたオブジェクトを次へ渡してゆくのではダメなのでしょうか?
「何をどこまでオブジェクトと見なして、どのようにクラスとして切るか」は、物事の見方、洞察・分析力、汎化するセンス、適度な妥協等、ちょっと慣れが必要かも知れません。
今は頭が脱皮している最中だと思います。もう少しで「見えてくる」はずです。
ちなみに以下が良書ですが、今見たら絶版のようで残念。中古も高値みたい。
http://www.amazon.co.jp/PHP%E3%81%AB%E3%82%88%E3 …
なるほど。使う人が使いやすいようになどとは考えてませんでしたね。
もう少し汎用性なども考えて使いやすいように、頑張ってみます。ありがとうございました。
¥ 25,998より これは、、残念ですね。
No.2
- 回答日時:
私は、ぶっちゃけ完全に理解はしていないとは思うんですが、オブジェクト指向。
そんな私の意見としては、オブジェクト指向にしたからと行って、利便性はよくなるけど、簡潔にかけるわけではない。
とくに、PHPのような開発環境がメンバの名前を表示してくれたりとかをサポートしてくれないとかえって面倒なことに。
しかし、データをカプセル化ができたり、継承により、柔軟にクラスの使い回しができたり、便利にはなる。
つまり、過去に作ったクラスを、ちょっとだけ変えるのに便利。
なるんだけど、もともとPHPは、変数の型がなかったりと、ナチュラルにポリモーフィズムだったりするので、PHPであえてクラスで作る必要が・・・・ある?とも。
のと、オブジェクト指向といのは、毎回全部自分で作れちゃう、小さいソフトを作ってもたいして変わらないというか、逆に分けがわからなくなる。
やはり、大規模で大人数のプロジェクトで真価を発揮するものだと、、、、
アホな私はそう決めました。
なので、ガンガン関数ベースで書いていってみては?
オブジェクト指向がどういう使いかたかが分からないのは、多分経験不足で、とりあえず、使い回しを意識して、グローバル変数は使わず関数で全部書いてみる。
例えば、ファイル読み込み用・保存用の関数とか自作してみる。
で、何度かその使い回しを使っていくうちに、使いまわせない状況ってのが出てくるんだわ。
それを改善できるのが、クラスって考え方で、それがオブジェクト指向に近いんじゃないかなー?と、私は思うんだけど、、、、たぶん、もっと頭のいい人からは、「そんなんじゃねーよーっ!」と言われるかもしれない。www
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(コンピューター・テクノロジー) ChatGPT ExcelVBAの精度は3.5と4で違いはある? 1 2023/04/21 21:00
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/05/21 02:41
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「クラス関数」「メンバ関数」...
-
phpのクラスメソッドの定義が長...
-
配列とオブジェクトの違い
-
PHP4、PHP5 1ファイル複数クラ...
-
クラス設計の良い参考書を教え...
-
ラッパークラスって何ですか?
-
フォントの色を変えるには?
-
PHPのWARNINGをcatchするには
-
onedrive にexcelファイルをア...
-
PHP8を使うと、大量のWarningが...
-
バッチを用いたフォルダの自動移動
-
CSV出力にHTMLが入ってしまう
-
index.phpって何ですか? 具体...
-
現在位置より2つ上のディレク...
-
透過PNGが透過されない!!
-
PHP 文字列を代入した配列を変...
-
PHPのif文でその処理を途中で抜...
-
$_SESSION 有効期限をブラウザ...
-
別ファイルの変数を呼び出した...
-
PHPで、エラーがない場合のみ画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「クラス関数」「メンバ関数」...
-
ラッパークラスって何ですか?
-
phpのクラスメソッドの定義が長...
-
class定義のphpをファイル分割...
-
PHP4、PHP5 1ファイル複数クラ...
-
phpのクラスにて別ファイルの変...
-
'_'(アンダースコア)の使い方...
-
コンストラクタで参照渡しをす...
-
データベースで値をインクリメ...
-
クラス
-
【PHP】クラス と 関数 の違い
-
ユーザ定義関数にデフォルト引...
-
PHPのフレームワークの中でSmar...
-
phpのオブジェクトの使用方法に...
-
phpでクライアントのブラウザの...
-
配列とオブジェクトの違い
-
POSTとGET
-
Codeigniter コアクラスの継承
-
外部ファイルのクラスのインス...
-
class.upload.phpの戻り値(返...
おすすめ情報