class User{
protected $dates =[
'created'
];
public function __construct(){
foreach( $this->dates as $date){
$property = $this->{$date};
$this->{$date} = new DateTime($property);
}
}
}
1)是在特定于php的类或通用oops概念的foreach循环中使用“ this”和“ date”变量吗?
2)为什么我们需要用“ this”括起来的花括号,我们不能简单地写$ this-> date吗?
答案 0 :(得分:0)
$ this-> {$ date},例如,假设您的日期为'2018-08-13',则您尝试访问$ this-> 2018-08-13。
我认为您想要的是
foreach($this->dates as $date){
//DO SOMETHING LIKE INITIATE THE OBJ
$obj->date = date("Y-m-d H:i:s"); //If you want current time
// OR
$obj->date = $date; //For the value on $date
}
答案 1 :(得分:0)
$this->{$date}
是variable variable。它使用$date
的值作为要访问的属性的名称。因此,当$date = "created"
(通过$this->dates
属性进行迭代时)等效于$this->created
。
如果表达式只是一个变量名,则不需要花括号,可以写$this->$date
;但是如果是更复杂的表达式,则需要使用大括号,例如$this->{$date . "_field"} would be equivalent to
$ this-> created_field . But many programmers use the braces consistently, just to make the code clearer and cause a warning if they forget the
$`。
您需要$
使其使用变量作为属性名称。如果您只写$this->date
,它将查找date
属性,而不是created
属性。
在许多脚本语言中都可以使用像这样的动态属性名称。例如,您可以使用this[date]
在Javascript中完成此操作。通常在诸如C ++之类的静态类型语言中不可用。
答案 2 :(得分:0)
也可以使用变量属性名称访问类属性。变量属性名称将在进行调用的范围内解析。例如,如果您有一个表达式,例如$ foo-> $ bar,则将检查本地范围中的$ bar,并将其值用作$ foo属性的名称。
例如:
<?php
class SimpleClass
{
// property declaration
public $var = 'a default value';
// method declaration
public function displayVar() {
echo $this->var;
}
}
?>
$ this-> var在类中声明了实际属性时使用(上面的$ var)
而您在本例中的$ this-> $ date会在您未在类中声明属性且仍希望使用它具有类属性的情况下使用...
要使用$ this-> dates,您需要声明一个类变量
class {
public $dates;
public function __construct($d){
$this->dates = $d;
}
}
$ this-> {$ date}将解释为 $ this->创建的