[PHP-users 20304]クラスとは。コンストラクタとは。メンバ変数宣言とは。

kenbooit @ excite.co.jp kenbooit @ excite.co.jp
2004年 2月 6日 (金) 23:06:35 JST


お世話になってます。
島田と申します。

クラスに関してご教授頂けたらと思います。
今まで本などを参考になんとなくクラスを作り続けてきたのですが、
しっかりと基本から理解したいと思い、質問させて頂こうと思いました。

----- VAR宣言ありバージョン -----

・class.ini

<?
class PrintClass {

  var $hoge1 = "";
  var $hoge2 = "";
  var $hoge3 = "";

  ## コンストラクタ
  function PrintClass () {
    $this->VarTwice();
  }

  ## 変数の内容を2回繰り返したものに変更する
  function VarTwice () {
    $this->hoge1 = "[$this->hoge1][$this->hoge1]";
    $this->hoge2 = "[$this->hoge2][$this->hoge2]";
    $this->hoge3 = "[$this->hoge3][$this->hoge3]";
  }

  function VarPrint () {
    print ("hoge1: $this->hoge1<br>");
    print ("hoge2: $this->hoge2<br>");
    print ("hoge3: $this->hoge3<br>");
  }
}
?>

・print.php

<?
require("class.ini");

class NewPrintClass extends PrintClass {
  var $hoge1 = "aaa";
  var $hoge2 = "bbb";
  var $hoge3 = "ccc";

  function VarPrint () {
    print ("CLASS-hoge1: $this->hoge1<br>");
    print ("CLASS-hoge2: $this->hoge2<br>");
    print ("CLASS-hoge3: $this->hoge3<br>");
  }

}

$object = new NewPrintClass;

$object->VarPrint();

//#### 動きの確認の為
print("------------------------------<br>\n");
print("hoge1: $hoge1<br>\n");
print("hoge2: $hoge2<br>\n");
print("hoge3: $hoge3<br>\n");
print("hoge1: $this->hoge1<br>\n");
print("hoge2: $this->hoge2<br>\n");
print("hoge3: $this->hoge3<br>\n");
?>




----- VAR宣言なしバージョン -----

・class2.ini

<?
class PrintClass {

  ## 変数の内容を2回繰り返したものに変更する
  function VarTwice ($var1, $var2, $var3) {
    $this->hoge1 = "[$var1][$var1]";
    $this->hoge2 = "[$var2][$var2]";
    $this->hoge3 = "[$var3][$var3]";
  }

  function VarPrint () {
    print ("hoge1: $this->hoge1<br>");
    print ("hoge2: $this->hoge2<br>");
    print ("hoge3: $this->hoge3<br>");
  }
}
?>

・print2.php

<?
require("class2.ini");

class NewPrintClass extends PrintClass {
  function VarPrint () {
    print ("CLASS-hoge1: $this->hoge1<br>");
    print ("CLASS-hoge2: $this->hoge2<br>");
    print ("CLASS-hoge3: $this->hoge3<br>");
  }
}

$object = new NewPrintClass;

$var1 = "aaa";
$var2 = "bbb";
$var3 = "ccc";

$object->VarTwice($var1, $var2, $var3);
$object->VarPrint();

//#### 動きの確認の為
print("------------------------------<br>\n");
print("hoge1: $var1<br>\n");
print("hoge2: $var2<br>\n");
print("hoge3: $var3<br>\n");
?>

例題としてふさわしいかどうかは別にして、
とりあえず上のようなプログラムを書きました。

自分が理解したいなと考えているのは、
「クラスを使うとこんな風に便利です。」ということです。

・オブジェクト化して、再利用できる

なんていうのはすぐに分かって、なかなか便利だなあ、と理解できたのですが、
コンストラクタ、メンバ変数の宣言の利点をいまいち理解しきれていないのかなあ、
と自分なりに分析しています。

上記プログラムの結果をみれば、VAR宣言している変数はクラス内でしか参照できないので、
プログラムが膨大な時にゴッチャにならなくていい、みたいなことも良く耳にするのですが、
1処理で1万行などというようなプログラムを書いた経験があるわけでもなく、
いまいちピンときません。

例では、処理したい「変数を2回繰り返す」というものは
どちらも同じように達成できているわけですし。

今はクラスファイルで大体100~500行程度のものをちょこちょこ作っているのですが、
VARとかコンストラクタって上記でいうところのどっちでやっても同じだなあ、
みたいな認識状態です。

別に単純なプログラムであってもVAR宣言だったり、コンストラクタを使うと
こんなに便利なことがあるんだよ、というものがきっとあるのではないか
などと推測しています。

VAR宣言、コンストラクタに限らず、クラスを使うとこんな風に便利だよ、
というご意見を色々と頂けたらと思います。

仕事上WEBメールしか使えない為、
一括読みにしていることから、質問をすることはあっても、
回答してあげるということをできなくて(勿論私レベルでできるショボイ質問に対してですが。)、
いつも恐縮しているのですが、よろしくお願い致します。

# 前回レス頂いたいわきりさん、ありがとうございました。
# この場を借りてお礼させて頂きます。


PHP-users メーリングリストの案内