循环遍历数组以创建类属性

时间:2012-07-02 22:31:09

标签: php arrays class object

我正在尝试为数组中的每个元素创建类属性。此时已经创建了数组,我只是为了演示目的在这里创建它。

我对类和对象不太熟悉。有人可以帮助我吗?

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"。

3 个答案:

答案 0 :(得分:1)

那是不可能的。但是,您可以在构造函数中创建它们:

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

这将创建公共变量 - 所以除非你想要私有/受保护,否则这是实现你想要的最简单方法。

答案 1 :(得分:1)

使用constructor从作为参数传入的数组中使用$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->$kvariable-variables的一种类型,您可以使用另一个变量的值设置变量的名称。

答案 2 :(得分: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");
    }
}