我正在尝试为数组中的每个元素创建类属性。此时已经创建了数组,我只是为了演示目的在这里创建它。
我对类和对象不太熟悉。有人可以帮助我吗?
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"。
答案 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->$k
是variable-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");
}
}