[PHP-users 22893]クラスのメンバ変数の定義

hogehoge77 @ excite.co.jp hogehoge77 @ excite.co.jp
2004年 8月 2日 (月) 02:32:46 JST


こんばんは。
吉村と申します。
クラスの勉強を始めたのですが、概念的な理解の段階で躓いてしまいました。
ご教授頂けたらと思います。

下は試しにと自作で作ったプルダウンメニューを生成するクラスです。
例えば、<select JavaScriptな記述>みたいなことをしたい時に
継承して、使い回せるという意味では、
関数ではなくて、クラスを作った甲斐はあるなあ、と思っています。
ここまではクラスの利点を自分では理解しているつもりです。

<?php
class HTML_Pulldown
{
    var $name;
    var $array;
    var $selected;
    
    function HTML_Pulldown($name, $array, $selected = '')
    {
        $this->name = $name;
        $this->array = $array;
        $this->selected = $selected;

        $this->printPulldown();
    }

    function printPulldown()
    {
        $this->printSelect();

        foreach ($this->array as $key => $this->value) {
            print "<option value=\"$key\"";
            if ($this->selected) {
                if ($key == $this->selected) {
                    print " selected";
                }
            }
            print ">";
            $this->printValue();
            print "</option>\n";
        }
        print "</select>\n";
    }

    function printSelect()
    {
        print "<select name=\"$this->name\">\n";
    }

    function printValue()
    {
        print "$this->value";
    }
}

$year  = array(""=>"", 2001=>"2001", 2002=>"2002", 2003=>"2003", 2004=>"2004");
new HTML_Pulldown("year", $year, 2002);

?>

躓いているのはメンバ変数についてです。
ネットでJAVAなどを例にしたページの解説では、
オブジェクトに対する「属性」というような概念であると私は捉えたのですが、

class HTML_Pulldown
{
    function HTML_Pulldown($name, $array, $selected = '')
    {
        $this->name = $name;
        $this->printSelect();

        foreach ($array as $key => $value) {
            print "<option value=\"$key\"";
            if ($selected) {
                if ($key == $selected) {
                    print " selected";
                }
            }
            print ">";
            $this->printValue();
            print "</option>\n";
        }
        print "</select>\n";
    }

    function printSelect()
    {
        print "<select name=\"$this->name\">\n";
    }

    function printValue()
    {
        print "$this->value";
    }
}

という様にメンバ変数を全くはしょってしまっても結果は同じですよね。

またPEARのHTML_Selectをハックしてみたのですが、
メンバ変数部分は
var $_options = array();
var $_values = array();
となっていました。

これは私の例の$arrayを分解したものなので、まだいいのですが、
$nameとか$selectedなどがメンバ変数に入るのか否かの根拠が、
オブジェクト指向に関する解説書なども読んでみたのですが、全く分からないでいます。

メンバ変数部分に限らず、添削して頂けたらと思っております。
よろしくお願い致します。


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