• ベストアンサー

phpのオブジェクトの使用方法について

プログラミングはPHPが初めてで、プログラミングというもの自体に慣れていないこともあり、初心者用の本を買ってそれに従って進めているのですが、オブジェクトのところで理解するのに行き詰まってしまいました。 検索してみたものの、以下のページがわかりやすそうだったのですが、これらを読んでみてもいまいちしっくりときません。 http://www.komonet.ne.jp/~php/chap10.htm http://www.stackasterisk.jp/tech/php/php03_09.jsp オブジェクト指向のコンセプトは把握できているつもりです。いつでも使い回しができるコードの束のようなものだと理解しています。しかし、その用法で今まで自分が読んできたものと違うことがあり、また、それらを使用する必然性にたいする理解ができません。いったいどういったタイミングで使用するのでしょうか?以下にそれらの例を挙げて見ました。 1.var $aaa = "hoge"; このvarはいったいどこからやってきたのでしょうか?それに関する解説が本にもWEBにも見つけられなくて困っています。これはクラスの定義内でのみ有効なのでしょうか?何のために使用するのでしょうか? 2.$this -> aaa これをなぜ、単に$aaaと表記しないのでしょうか? 3.プロパティ(property) なぜクラス内の変数(variable)をわざわざそう呼ぶのでしょうか? 4.メソッド(method) なぜクラス内の関数(function)をあえてそう呼ぶのでしょうか? 5.コンストラクタ(Constructor)、継承(Inheritance) 1~4の部分で躓いているためか、いまいちその必要性が理解できません。 もしご存知の方おられましたご教授していただけるとうれしく思います。

  • jyuu
  • お礼率83% (553/665)
  • PHP
  • 回答数8
  • ありがとう数11

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

  • ベストアンサー
  • bnosuke
  • ベストアンサー率21% (4/19)
回答No.6

>いつでも使い回しができるコードの束のようなものだと理解しています。 たしかにこの認識だと、オブジェクト指向は理解できないでしょう。 「なにがしかの存在や事象を表すためのデータをセットにし、さらにそのデータを操作するための手続きも一緒にまとめてセットにする」というのがオブジェクト指向の考え方です。 データにコードの束をセットにしてあげたものと解釈する方がいいです。 何かの存在を軸に、それを表す変数を集め、操作するための関数を付け足してゆく。 最初のうちは、クラスはそうやって作るものとしておいてください。 そして、クラスを作っただけではまだ使えません。 クラスの宣言を基に、使う変数の領域を割り当て、実際に動かせるものを生成します。 これがオブジェクトの生成(またはインスタンス化)です。 タイ焼きの型がクラスで、実際に生地とアンを入れて作ったタイ焼きがオブジェクトだと考えるといいでしょう。 クラスはあくまで型で、オブジェクトを作るときの設計図にすぎません。 また、同じクラスからいくらでもオブジェクトを作ることができます。 ですから、ここのオブジェクトを区別する手だてが必要です。 これは普通、オブジェクトを変数のようなものに入れて、変数名で区別しますが、そのオブジェクトの中からは自分の名前は見えません。 オブジェクトの中というのは、そのオブジェクトのもつ関数の中のことです。 ですので、「自分自身」を表す”this”をキーワードにします(Javaでもそうです)。 以降ご質問に回答しますが、当方Cとjavaは解るのですが、PHPはさっぱりなので、その点はご容赦下さい。 オブジェクト指向の観点からご説明します。 1.var $aaa = "hoge"; そのクラス(正確には個々のオブジェクト)に持たせる変数の宣言をするために必要なキーワードでしょう。 変数の宣言をするときに頭にvarをつけるのはPascal等でもそうでした。 2.$this -> aaa 上でも書きましたが、そのオブジェクト自身を表します。 この場合、「このオブジェクトのもつ変数aaa」を表します。 逆にこれがないと、$aaaはどの変数を指すことになりますか? 断定できないのではないでしょうか。 もしくはその場で作ったaaaを指すのでしょうか。 どちらにしてもオブジェクトの変数にアクセスできませんよね。 3.プロパティ(property) 4.メソッド(method) どちらもオブジェクト指向の用語です。自分が判るのなら変数、関数と呼んでも支障はないです。 ある事象、存在の特性と操作方法ということでそうなっているのでしょう。 5.コンストラクタ(Constructor)、継承(Inheritance) コンストラクタは、オブジェクトを生成するときにやりたいことを書きます。 変数の初期設定が一般的ですが、たとえば、オブジェクトを作ったら必ずどこかに登録しておくという場合にも使えそうですよね。 継承は、あるクラスから派生したクラスをつくるときに使います。 関数の上書きや追加ができ、既存のコードを流用できると言うことで最初はもてはやされました。 ですが、上手くやらないとかえって効率が悪いことが解り、継承以外の機能を上手く組み合わせてクラスの設計をする手法が提唱されています。 以上です。

jyuu
質問者

お礼

かなりわかりかけてきました。ありがとうございます。 >タイ焼きの型がクラスで、実際に生地とアンを入れて作ったタイ焼きがオブジェクトだと考えるといいでしょう。 生地:メソッド アン:プロパティ 生地+アン:オブジェクト 焼きあがったタイ焼き:インスタンス のような感じでしょうか? 2.に関してですが、どうもそのあたりのメカニズムが解りません。でも、かなりロジカルな理由があることがわかっただけでも感謝いたします。後はなれるだけ、のように感じてきました。

その他の回答 (7)

回答No.8

> 2.たとえば、 > $obj1 = new Hello_class ( ); > newを使って、「この"Helloc_class()"は$obj1でですよー、」という行為が「インスタンス化」、というものなのでしょうか? で$ obj1が「インスタンス」と呼ばれるものになるのでしょうか? でもそうると、「オブジェクト」との見分けがごちゃごちゃになってしまいます。 > 4.やはりそれぞれの呼び方というのは、以前のプログラム言語の影響を受けているんですね。 結局のところ、どちらも同じ意味ですね。 「インスタンス化」を行って「$obj1オブジェクト」を生成します。 で、それらのオブジェクトは「クラス側」からしたら「インスタンス」と呼べますが、 利用する側からすれば「オブジェクト変数に入れたんだから、オブジェクト」なわけです。 クラス側からしたら、今5つのインスタンスが生成されてる、 クラス利用側からしたら、今5つのオブジェクトが生成されている。 クラス側としてはクラスの変数・関数ですが、それをオブジェクトとして 利用する側としてはオブジェクトの属性(プロパティ)と手続き(メソッド)になる感じ かな~と個人的に思います。 利用者が実際に使うのはクラスではなく、クラスという雛形を利用したオブジェクトですし。 クラス側と、オブジェクト側で呼び名が違う感じでしょうか。 > 5.初期化処理というのがいまいちしっくりときません。たとえば、googleデスクトップで、検索後を入力+エンターで、キーワードの検索されたブラウザが開く、的な考え方でしょうか?「検索後:()内の値」、で「ブラウザを立ち上げてクエリを実行する:クラス内のコード」のような。 んと、そのクラスを利用するにあたり、予め処理させておかなければならない事を 処理させたり、値をセットしたりですね。 googleデスクトップは深く利用した事がないので分からないのですが、 例えばそういったアプリケーションなどにコンボボックスがあった場合、 そのコンボボックスは選択肢がないと利用価値が無い為、 いくつかの選択肢があるわけですよね? じゃあその選択肢はいつ追加すればいいのか? コンボボックスを呼び出した時の選択肢が一律なら、 そのコンボボックスを呼び出した時点で、コンボボックスクラスで 選択肢をセットしまえば良いわけです。 それが初期化処理(コンストラクタ)になります。 いちいちコンボボックスクラスを利用する側のプログラムで あれを追加、これを追加、なんてする必要がありません。 そこから派生して、オーバーロードなんていうのもありますが、 PHPで出来たがどうか記憶にありませんし、一度にあれもこれもというのは 難しいでしょうし^^; あんまりいい例が思いつきませんでしたが、、、こんな感じでしょうか?

jyuu
質問者

お礼

みなさんのおかげで大分とPHPのオブジェクトの扱い方が理解できたように思います。 継承も呼んでみるとそんなに新しいことでもなくすんなりと理解できました。 ありがとうございました。

  • bnosuke
  • ベストアンサー率21% (4/19)
回答No.7

> 生地:メソッド > アン:プロパティ > > 生地+アン:オブジェクト > > 焼きあがったタイ焼き:インスタンス > > のような感じでしょうか? タイ焼きの例えについてはそこま深くでは考えていませんでした。 なるほど、そう考えることもできるのか、と逆に感心してしまいました。 何に感心したかというと、 1)アンには外から直接触れることはできず、 2)外からは生地にしか直接触れられない 3)外からアンが見えるように作ることもできるけれども、それは美しいとは言えない 4)けれどもそれが必要なときもある 5)なので、アンを最小限の大きさで露出するのが好ましい という例えに発展できるなぁという点にです。 焼いたタイ焼きがウグイスあんか普通のアンコか、わからなくなったときに割って確かめるわけにはいきませんよね。 中が見えるように焼けばいいけど、やたらアンを露出するとそこらにべたべた着いてかえって困ったことになります。 けど、しっぽの隅っこの方をちょっとだけ中が見えるように焼いておけば万事解決ですよね。 (ミスタードーナッ○もそうですよね) これががるさんやnaktakのおっしゃる「カプセル化」です。 > 2.に関してですが、どうもそのあたりのメカニズムが解りません。 <?php class FOO{ var $aaa = "bar"; ----------- (1) function func(){ echo $aaa; ----------- (2) } } $aaa = "global"; ----------- (3) $obj = new FOO(); $obj->func(); ----------- (4) ?> これを実行すると何が表示されるでしょう? 何も表示されませんね。 (2)の $aaa を $this->aaa に直すと「bar」と表示されます。 仕組みを説明します。 (2)の実行直前で(1)と(3)の2つの $aaa が存在します。 (2)の実行時にPHPの実行エンジンは $aaa という名前を見つけますが、PHPはこの名前を(1)や(3)とは認識しません。 関数 func の実行中に初めて出てくる名前なので、PHPは $aaa を新しく作ります。 echo で表示をしますが、(2)の $aaa は中身が空なので、何も表示されません。 ですが、(2)の $aaa を $this->aaa に直すと、(1)の $aaa と認識されるので、(1)の $aaaが表示されます。 (3)の $aaa は(2)の場所からはおそらく直接ふれることはできないでしょう。 ここでひとつの疑問がでますよね。 funcも(1) の$aaa も同じ クラスFOOの仲間なんだから、funcの中で$aaaと言えば(1)の $aaa を指すのはごく自然のこと。 なのになぜ、$this->aaa なんて書くのか。 理由は、PHPの言語仕様が、宣言なしにいきなり変数を使えるようになっているからだと思います。 単に $aaa と書いたら、そこで新しく変数を作るんだ、と解釈されてしまうからです。 だからはっきり、「このオブジェクトの$aaaですよ」と示す必要があるのです。 Java でも this.aaa という書き方はできますが、普通は aaa と省略して書きます。 わかりきっているからです。 宣言していない変数名が出てきたら、それはエラーになります。 その代わり宣言した名前は、どこまで有効か、きっちりわかるようになっています。 >後はなれるだけ、のように感じてきました。 どこまで行くかによりますが、確かに経験は必要です。 試して、考えて、調べて、聞いて、の繰り返しです。 頑張ってください。

jyuu
質問者

お礼

><?php >class FOO{ >var $aaa = "bar"; ----------- (1) >function func(){ >echo $aaa; ----------- (2) >} >} > >$aaa = "global"; ----------- (3) > >$obj = new FOO(); >$obj->func(); ----------- (4) >?> これでかなり理解が深まりました。 大変ありがとうございました。

回答No.5

勝手に補足させていただきます。補足返しって事で(笑) しかも質問の回答でもありません^^; #2でがるさんが仰っている「カプセル化」についてですが、 「なんでそんなめんどくさい事しなきゃいけねーの? 直接読み書きすればいいじゃん。めんどくさいだけじゃん。」 第一印象はこれじゃないですか? ええ、めんどくさいですね。 それならしなくても良いです。 但し、規模が小さくて用途が分かっており、自分自身しか利用しない場合に限ります。 つまり、今回質問に上がっているURLにあるようなサンプル的なプログラムとかですね。 規模が大きくなってくればくるほど、「これは値を勝手にいじっていいものなのか?」、 「なにに使っているのか?」わからなくなるものです。 プログラムを配布したり企業においては、そのクラスを自分自身だけが 使うものではなくなります。 そこで、その変数にどういった操作を許可するのかを制御します。 例えばセッターの場合、数値が入るプロパティだが、その数値は1から5の間じゃないといけない。 もし0などをセットしろとセッターが呼び出されたとしても、 そういった時はセッターで無視したりできます。 ゲッターの場合、セッターは記述せず、読み出しのみ可能なプロパティという事なも 実現できます。 そういった事から、セッター・ゲッターを利用しなかった場合と比較すれば、 利用する人がどれだけ呼び先のクラスを意識せずにプログラミングする事が 出来るかは明確でしょう。 「カプセル化」はプログラムの隠蔽化を図ると同時に、 開発者が呼び先クラスの内部的なプログラムを意識しないで済む効果があります。 但し、PHP4ではセッター・ゲッターを持っても実はあまり意味を成しません。 そういうのがあるから、それを利用しましょうね、くらいにしか効果を発揮しません。 なぜなら、PHP4で作成されるクラスのプロパティ・メソッドは アクセス制御(public, protected, private)が出来ないからです。 通常、セッター・ゲッターを利用するプロパティなら、 クラス内で宣言されているプロパティは外部から読み書きできず、 セッター・ゲッターを介して読み書きを行うものです。 しかし、PHP4では外部から読み書きを出来なくする設定がありませんので、 どんなプロパティ・メソッドも、呼び元から$object->property(method)の記述で 読み書きが出来てしまいます。 そういった制御もしっかり行いたいならPHP5ですね。 PHP4って、かなり大雑把なクラス設計なんですよね。 大雑把な分、中途半端にしかクラスを理解出来ないと思いますが、 取っ掛かりとしてPHP4のクラスはかなり楽かと思いますよ。 その後はPHP5でもJavaでもC++でも学んで、知識を深めていけばいいと思います。 回答でない事を書きましたが、余計に混乱しそうでしたら、 上記で記した事は忘れて下さい^^; いずれは通る道ですのでその時にまた・・・。

jyuu
質問者

お礼

えと、一応PHP5でやっています。基本的なことが理解できたら教えてくださったことを実行していこうと思います。ありがとうございます。

回答No.4

世の中はオブジェクト指向へと移行しており、PHPも例外ではありません。 クラスと言うのはともかく、プロパティとか、メソッドとかコンストラクタとか。。。。その辺の言葉でどうしても引っかかりやすいですね。 私自身まだまだ理解しきった訳ではありません。 ところで、サーバサイドのWebプログラミングのPHPとは切っても切りはなせないクライアントサイドのスクリプト、JavaScriptでは、プロパティとかメソッドと言う言葉がとても頻繁に出てきます。今風のUIを実現するには、どうしても理解しなくてはいけない関門です。 JavaScriptが分かるようになると、クラス、メソッド、プロパティというあたりが結構分かるようになってきます。 気分転換も兼ねて、JavaScriptを勉強されることをおススメします。

jyuu
質問者

お礼

ありがとうございます。そうですね、ここで質問させていただいて、それでもどうしても行き詰まったらJavaScriptをやってみようと思います。VBもやったことがないので、そちらもちょこっと触ってみようと思います。

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.3

がると申します。 んっと…回答は概ね為されているかと思うので、それ以外の観点を少し。 PHPには、一応「内部的には」型の概念があります。 ただ「プログラマレベルでは指定が出来ない」ので、一般には「型がない」と説明されることが多いようです。 んで。サンプルのPageを見たのですが。 本当にclassを使いたいのであれば、最低限 $obj1->name = "Suzuki"; の部分は $obj1->set_name("Suzuki"); のように書いてください。ちなみにこういう風に書く場合、当然ながらclassの中に function set_name($s) { $this->name = $s; } という新しいメソッドが必要です。 で、出来れば対になる function get_name() { return $this->name; } を実装し、SayHalloメソッドも function SayHello ( ) {  print "こんにちは、" . $this->get_name() . "さん。"; } とされることをお勧めします。 こーゆーのを俗に「セッタ」「ゲッタ」、あわせて「アクセサ」とか呼称しますが。 一般に「カプセル化」とか呼ばれる、クラスの利点の一つがこれで享受できるようになるので。 ただ、業務でやるならばともかく(業務プログラマならオブジェクト指向は必須)、趣味レベルですと…ちょっとピンとくるのに時間がかかるかもしれません。 基本的にオブジェクトは「プログラマが楽をするためのものだ」と思っていただけると割合に早く覚えられるかと思います。

jyuu
質問者

お礼

詳しく書いてくださってありがとうございます。 オブジェクト指向の概念に慣れてきたら、そうするように心がけていこうと思います。 ただ、新しい名称、インスタント、継承、コンストラクタ、などを理解するのに今精一杯なので、今はそちらに集中しようと思います。

回答No.2

1.正しい説明は知りませんが、PHPには変数の型という概念がありません。  ですから、クラスのメンバ変数には「変数ですよ」という宣言を  行っているだけに感じています。  PHP4では、メンバ変数を定義する際には必ず必要だったかと思います。 2.同一インスタンス内のメンバ変数にアクセスする時、  どうやってアクセスすればいいか?それを考えたら必須です。  メソッドの引数やメソッド内の変数に「$aaa」があった場合、  絶対切り分けが必要になってきますし。 3. 4.クラスはインスタンス化を行い、オブジェクトとなります。  VBなどの開発画面を見たことあれば想像出来ると思いますが、  ボタンコントロールのテキストを「変数」とは呼びませんし、  クリックした時に動作するメソッドを「関数」とは呼びません。  まぁ、VB6以前だとそれは「イベントプロシージャ」と呼ばれそうですが。 5.コンストラクタはクラスで初期化処理をする必要がある場合に利用します。  継承は親と同じ機能を持ち、かつ特化した機能を持ったクラスを作るのに有用です。  実際に何かのサンプルを見た方が分かり易いかと。

jyuu
質問者

お礼

2.たとえば、 $obj1 = new Hello_class ( ); newを使って、「この"Helloc_class()"は$obj1でですよー、」という行為が「インスタンス化」、というものなのでしょうか? で$obj1が「インスタンス」と呼ばれるものになるのでしょうか? でもそうると、「オブジェクト」との見分けがごちゃごちゃになってしまいます。 4.やはりそれぞれの呼び方というのは、以前のプログラム言語の影響を受けているんですね。 5.初期化処理というのがいまいちしっくりときません。たとえば、googleデスクトップで、検索後を入力+エンターで、キーワードの検索されたブラウザが開く、的な考え方でしょうか?「検索後:()内の値」、で「ブラウザを立ち上げてクエリを実行する:クラス内のコード」のような。 すみません、継承に関して現在がんばって理解しています。そのほかに関してはかなり理解を深めることができました。ありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>1 varはクラス内で共有するための変数を宣言するためのもの > 2 $this->aaaはクラス内で共有される変数 $aaaは関数内でしか使わない変数の違いです。 まぁグローバルとローカルの違いのようなものです。 > 3 & 4 いちいち「クラス内の変数」とか「クラス内の関数」と いうのが面倒だからじゃないですか? > 5 コンストラクタはクラス宣言をするときの初期設定が できます。使いようによっては便利でしょう。 というか、ないと困るひとも多いはず。 継承あたりになると、グループワークなどでソースの 使い回しをしたりするケースと考えるとわかりやすい のでは? 以下参考サイトが簡潔に解説されていておすすめ

参考URL:
http://www.shigeweb.jp/php/project_p/?section=first&page=class
jyuu
質問者

お礼

紹介してくださったサイトはかなりわかり易かったです。ありがとうございます。 コンストラクタに関してですが、たとえば、 $hode = new HODE(aaa); とすると 「ここからHODEのクラスを使いますよー」と宣言すると同時に、()内にaaaの値を前もって定められたメソッド(コンストラクタ?)に当てはめて、何らかの処理を施す、ためのものと考えてよいのでしょうか? 要は、ソフトウェアの同時起動のようなものでしょうか?Windowsでいえばスタートアップに登録、見たいな。 今、継承のところをがんばって読んでいます。あまりお礼が遅くなっても良くないと思い、自分で解釈が整理できていないままの返事になってしまいました。

関連するQ&A

  • PHPフレームワーク理解に役立つ、オブジェクト指向入門書

    PHPでWEBアプリを作りたいために、html,css,Mysql,PHPなどの基本的な事柄を勉強し、cakePHPというPHPフレームワークを最近使い始めました。オブジェクト指向やクラスについてはPHP入門書に書いてあるのを読んだだけで、なんとなくしか分かっていません。 PHPのオブジェクト指向やフレームワークとのつながりを理解できるような、初心者向けのお勧めの本はないでしょうか? オブジェクト指向について学ぶよい本は探しやすいのですが、PHPフレームワークを理解するために適した本はどれなんだろうと悩んでおります。基本的な概念はすべて同じだから、PHPとかまったく関係なくオブジェクト指向関係の本を読めばいいのでしょうか? 候補の本 ・オブジェクト指向でなぜつくるのか ・Head Firstオブジェクト指向分析設計 ・いちばんやさしい オブジェクト指向の本

    • 締切済み
    • PHP
  • PHP5 コンストラクタや初期化の意味がわからない

    プログラミング初心者です。本を参考にしてPHPを勉強しています。 クラスの章でコンストラクタについて以下のように書かれていました。 コンストラクタはインスタンス化のタイミングで実行されるという性質上、 プロパティ(メンバ変数)やクラスで使用する各種リソースの初期化 といった処理を記述するのが一般的です。 初期化処理が不要な場合、コンストラクタは省略可能。 ここで質問です。 インスタンス化を行うのは初期化するためということでしょうか? 「~といった処理を記述するのが一般的」ということは、初期化が 本来の目的ではないという意味にもとれますがどうなんでしょうか。 また静的メソッドについては、 「インスタンス化を行わなくても利用できるメソッド」 と書かれていましたが、何がどう違うのか分かりません。 初期化とは何でしょうか?またなぜ初期化を行うのでしょうか? 静的メソッドと何が違うのでしょうか?

    • ベストアンサー
    • PHP
  • ユーザー定義オブジェクト

    現在、ユーザー定義オブジェクトについて勉強しています。 以下は本からの抜粋です。 //コンストラクタを定義する。 //thisで参照するオブジェクトの初期化法に注目   function Rectangle(w,h) { this.width=w; this.height=h; } //コンストラクタを呼び出して2つの長方形オブジェクトを生成する。 //widthとheightをコンストラクタに渡して、それぞれの新しい //オブジェクトを適切な形で初期化するやり方に注目 var rect1=new Rectangle(2,4); var rect2=new Rectangle(8.5,11); ★質問★ this.width=w; this.height=h; var rect1=new Rectangle(2,4); var rect2=new Rectangle(8.5,11); この2箇所で行っている「初期化」という作業の意味がよく分かりません。 また、ユーザー定義オブジェクトの概念についていまいちイメージ がつかめていません(特にthisとnewを使用している意図など) ご教授いただきたく、よろしくお願いします。

  • オブジェクト生成時のセオリーについて

    オブジェクト指向を採用しているプログラミング言語において、ほとんどの場合、オブジェクト生成時に使用されるコンストラクタは返り値を持てません。 また、コンストラクタにて例外を投げるといったことは推奨されていないケースが多いです。 そんな中で、コンストラクタに何らかの引数を渡してインスタンスを生成するクラスの場合、不十分な引数を渡すことで使用できない状態となるインスタンスが生成されることがあります。 こういったことを踏まえて、渡される引数が適しているものであることを確認する役割というのは使用されるクラス自身が担うのか、クラスを生成する外部の処理(ファクトリー的なクラス・メソッド)が担うのか、どちらが一般的なセオリーなんでしょうか? 無論、不十分なインスタンスが誤って使用されないようにメソッドにエラー処理をかけ、「使用できない状態のオブジェクトである」ことを通知するのは当然なのでしょう。 ただ、最近知り合いから「クラスはできるだけ不変な状態を保つよう設計した方がいい。そのほうが使いやすく、再利用時のバグが減る」という話を聞いて状態を持たないクラスの設計というのを考えこんでしまい、悩んでいます。 わかりにくい質問かもしれませんが、回答よろしくお願いします。

  • phpのオブジェクト指向でつまづきました・・・

    phpのプログラムをオブジェクト指向で書こうと思ったのですが、クラス間のデータのやり取りのあたりでつまづきました。 クラスはそれぞれ 1.設定用 2.データの読み書き用 3.入出力用 4.データ処理用 5.メイン です。 オブジェクト指向で書く前よりはコードも見やすくなったのですが、例えば4のデータ処理のところからは1、2、3の全てのプロパティを参照していたりして、なんだか複雑に。 オブジェクト指向で検索するとwikipediaには プログラムを構成するコードとデータのうちコードについては手続きや関数といった仕組みを基礎に整理され、その構成単位をブラックボックス とすることで再利用性を向上し、部品化を推進する仕組みが提唱され構造化プログラミング (structured programming) として1967年にエドガー・ダイクストラ (Edsger Wybe Dijkstra) らによってまとめあげられた と書いてありました。これだと関数を種類ごとにまとめただけであまり部品化はされておらず、前と変わらないような気がしてしまって・・・ 例えば設定用のクラスはのプロパティほとんどすべての所で値が必要になるのですが、毎回newを使うのは気が引けるので、クラスの外で new でインスタンス化して必要なところから毎回 global で呼び出したりしているんですが・・・使い方が間違っている気がするのですが、そういったことを解説しているサイトが見当たらなかったため、全く分からない状態です。そもそもこの場合、設定用の値はクラスにまとめるべきなのかどうか・・・。 書く時は$クラスー>メンバ変数 とか $クラスー>メンバ関数 のように書くので今何をしているのかが分かりやすく、それは便利だと思うのですが。 すみません。自分でも上手く説明できずによくわからない文章になってしまいましたが、結局の所オブジェクトがどんな物でどんな書き方をすれば良いかが分かっていないのだと思います。そういった所を分かりやすく教えてください。お願いします。

    • ベストアンサー
    • PHP
  • 【オブジェクト指向について】

    【オブジェクト指向について】 こんにちは。初めて質問をさせていただきます。 さて、ただいまVBを勉強中なのですが、オブジェクト指向のところで躓いてしまいました。 質問したい事は以下の点です。 (1) オブジェクト指向の理解について   オブジェクト指向とは、プログラミングをするときに変数や機能などをクラスというものに格納しておくことで、プログラミングを円滑にすすめるための概念であると理解していますが、この理解は正しいのでしょうか? ご回答お待ちしております。よろしくお願いいたします。

  • オブジェクト指向に関して。

    Javaの解説本を読んでオブジェクト指向プログラミングという物があることをしりました。その本には「オブジェクトはデータとそのデータを扱うための機能を持っている。この機能はメソッドと呼ぶ。クラスは設計図のような物で変数とメソッドから構成されている。設計図を実際に形にした物がインスタンスである。」と書いてありました。私はオブジェクト=クラスのような感じがしたのですが、実際のところオブジェクト=クラスでいいのでしょうか?  また、友人に話したところ、オブジェクト指向はサブルーチンに似ているといっていました。私はプログラミングの知識が全くないのでサブルーチンという物が何なのかわからないのですが、サブルーチンとオブジェクト指向の考え方は違うような気がするのです。友人に説明して納得させるにはどうしたら良いのでしょうか? ぜひ、力を課してください。

  • クラス、メソッド、プロパティ、変数などの意味は?

    いろんなサイトやネットでいろいろ調べたのですが、 よく分かりませんでした。自分なりに考えたことですが、 (1)~(6)の用語の内容とコード上での色付けは正しいでしょうか? (1)クラス(緑枠) コンストラクタ、メソッド、プロパティを一括りにまとめたパッケージのこと。 つまり、functionの【{】と【}】の間にあるもの。 (2)オブジェクト(青枠) 関数。すなわち「複数の物や動作を入れる物」。 つまりfunctionで始まるものをオブジェクトと呼ぶ。 (3)コンストラクタ(= クラス名または関数名)(紫枠) 「構築子」のこと。オブジェクトを作る名前の部分。 つまりfunction直後に付ける関数名(クラス名)をコンストラクタと呼ぶ。 (4)プロパティ(赤枠) 「特徴」のこと。 つまりfunction内で指定された変数(var b)をプロパティと呼ぶ。 function a(){var b;}; (5)メソッド(水色枠) 「動作」のこと。 つまりオブジェクト(functionで始まるもの)が 変数(var b)に指定された場合はメソッドと呼ぶ。 var b = function a(){}; (6)変数(灰色枠) function外で指定された変数(var b)は、変数と呼ぶ。 function a(){}; var b;

  • javascriptを只今勉強中なのですが、オブジェクトについてこんが

    javascriptを只今勉強中なのですが、オブジェクトについてこんがらがってしまいました。 var obj = new Object(); var obj2 = {}; Object.prototype.prop1 = "hoge"; obj,obj2共にprop1にhogeがセットされるのですが、オブジェクトリテラルのobj2は Objectコンストラクタのインスタンスと解釈できるのでしょうか?? new演算子について色々とfirebugで調べていたところこの疑問が出てきました。 newなしでもインスタンスができるのでしょうか? オブジェクトを理解していないので意味不明な質問かもしれませんが どなたかアドバイスいただけると嬉しいです。

  • PHPでオブジェクト指向開発してますか?

    実務でPHPでオブジェクト指向開発しているプログラマ(もしくは案件・企業)の割合ってどのくらいのものでしょうか? 当然、外部からPEAR等のクラスをひっぱってきたり、フレームワークを使用することはあると思いますが、設計レベルでオブジェクト指向開発をすることは、どのくらいの割合でありますでしょうか? つまり、interfaceやimplements、abstractといった単語を、仕事で使ったことがあるPHPプログラマはどのくらいいるのでしょうか? それとも、そもそもインターフェースや抽象クラス等は、ライブラリの開発者のためのものであって、一般のプログラマはむしろ使わないほうがいいのでしょうか? 周りに、PHPプログラマを本職でやってる人がいないので、ご意見を伺いたいです。

    • ベストアンサー
    • PHP