在PHP类中使用foreach

时间:2018-08-13 20:10:06

标签: php

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吗?

3 个答案:

答案 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->创建的