2012-07-02 49 views
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」。

+2

如果你只是想要一個值對象,然後'$ OBJ =(對象)$數組;'也將工作。 – mario

+0

這會將其轉換爲stdClass類型的對象。請參閱http://stackoverflow.com/questions/931407/what-is-stdclass-in-php –

+0

語法錯誤btw與您的......無效語法有關。你需要用'var'或'public'來爲每個'$ days [「xx」] ='「賦值」做序。而「public」不是該函數中的有效聲明。 (哦,等等,甚至沒有功能)。請再次檢查http://www.php.net/manual/en/language.oop5.properties.php。 – mario

回答

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->$k是一種類型的variable-variables可在其中設置一個變量的名稱使用另一個變量的值。

1

這是不可能的。但是,你可以在你的構造函數創建它們:

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

這將創建一個公共變量 - 所以,除非你想讓他們私人/保護,這是實現你想要的最簡單的方法。

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"); 
    } 
}