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是一种变量变量,您可以在其中使用另一个变量的值来设置变量的名称。

于 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 回答