0

配列内の各要素のクラス プロパティを作成しようとしています。配列はこの時点で既に作成されています。ここでは、デモンストレーションのために作成しているだけです。

私はクラスとオブジェクトにあまり慣れていません。誰か助けてくれませんか?

class MyClass  
{  
 $days['first'] = "Mon";
 $days['second'] = "Tue";
 $days['third'] = "Wed";

 foreach ($days as $k => $v) {
     public $k = $v;
 }

}  

$obj = new MyClass;  

echo $obj->first; // Mon

「解析エラー: 構文エラー、予期しない T_VARIABLE、T_FUNCTION が必要です」というメッセージが表示され続けます。

4

3 に答える 3

1

それは可能ではありません。ただし、コンストラクターでそれらを作成できます。

public function __construct() {
    $days = array();
    $days['first'] = "Mon";
    $days['second'] = "Tue";
    $days['third'] = "Wed";
    foreach($days as $k => $v)
        $this->$k = $v;
}

これにより、パブリック変数が作成されます。したがって、それらをプライベート/保護したくない場合を除き、これが目的を達成する最も簡単な方法です。

于 2012-07-02T22:32:55.327 に答える
1

次のように、コンストラクター$this->$keyを使用して、パラメーターとして渡される配列からプロパティを動的に設定します。

class MyClass  
{  
    function __construct( $dates) {
        foreach( $dates as $k => $v) 
            $this->$k = $v;
    }
}

// Can also put this into the __construct() function
$days = array();
$days['first'] = "Mon";
$days['second'] = "Tue";
$days['third'] = "Wed";

$obj = new MyClass( $days);
echo $obj->first;

$this->$k別の変数の値を使用して変数の名前を設定できるタイプのvariable-variablesです。

于 2012-07-02T22:33:34.907 に答える
1

__get()このタスクには魔法の方法も利用できます。

class MyClass {
    private $days = array('first' => 'Mon', ...);

    public function __get($key) {
        if (isset($this->days[$key])) {
            return $this->days[$key];
        }

        throw new Exception("Couldn't find a property for key $key");
    }
}
于 2012-07-02T22:34:55.823 に答える