0

あいまいなタイトルでごめんなさい...私は言葉にするのが難しいように見えるphp4クラスに問題があります。

私のクラスには「possibleValues」配列があり、外部から変更できる特定の属性に受け入れられる値の種類に関する情報を保持しています。以下の擬似コードの例では、同じ許容値(色)を共有する属性があることがわかります。明らかに、ある$this->colorsクラス変数を別のクラス変数で定義できないため、私のコードでは失敗します(できますか?)。

同じ値を許可する異なるフィールドに対して同じ有効なオプションを繰り返す必要がないように、このように参照できる共通の色の配列を設定するにはどうすればよいですか?

Class MyTest {

    var $colors = array('red', 'yellow', 'blue');

    var $possibleValues = array(
        'someAttribute',               array(0,1),
        'someEmotions',                array('happy, 'sad'),
-->     'someColorableAttribute',      $this->colors,
-->     'someOtherColorableAttribute', $this->colors,
     );

    ...

}
4

2 に答える 2

1

あなたの質問に答えるには、コンストラクターで変数を設定する必要があります。本当に使用すべきではないPHP4では、コンストラクターにクラスの名前を付ける必要があります。

function MyTest()
{
   $this->var = $this->colors;
}
于 2012-08-20T11:39:51.970 に答える
1

$possibleValuesinコンストラクターを設定したくない場合は、次の方法を試すことができます。

PHP 4

class MyTest {
    var $colors = array('red', 'yellow', 'blue');

    var $possibleValues = array(
        'someAttribute' =>             array(0,1),
        'someEmotions'  =>             array('happy', 'sad'),
        'someColorableAttribute' =>    'colors',
        'someOtherColorableAttribute' => 'colors',
     );


    function getPossibleValues($attr) {
        //no attribute, empty list
        if (!array_key_exists($attr, $this->possibleValues))
            return array();

        $possible_values = $this->possibleValues[$attr];
        //value is a string, check for object variable with such name
        if (is_string($possible_values)) {
            if (!array_key_exists($possible_values, get_object_vars($this)))
                return array();

            return $this->$possible_values;
        }

        return $possible_values;
    }
}

$a = new MyTest();
var_dump($a->getPossibleValues('someAttribute'));
var_dump($a->getPossibleValues('someEmotions'));
var_dump($a->getPossibleValues('someColorableAttribute'));
var_dump($a->getPossibleValues('someOtherColorableAttribute'));

PHP 4には存在しないため、使用しget_object_varsています。property_exists

PHP 5(クラス定数)

class MyTest {
    const COLORS = 'red|yellow|blue';

    private $possibleValues = array(
        'someAttribute' =>             array(0,1),
        'someEmotions'  =>             array('happy', 'sad'),
        'someColorableAttribute' =>    self::COLORS,
        'someOtherColorableAttribute' => self::COLORS,
     );


    public function getPossibleValues($attr) {
        //no attribute, empty list
        if (!array_key_exists($attr, $this->possibleValues))
            return array();

        $possible_values = $this->possibleValues[$attr];
        //value is a string, explode it around |
        if (is_string($possible_values)) {
            return explode('|', $possible_values);
        }

        return $possible_values;
    }
}
于 2012-08-20T12:13:42.190 に答える