【问题标题】:Looping through an array to create class properties循环遍历数组以创建类属性
【发布时间】:2012-07-02 22:31:08
【问题描述】:

我正在尝试为数组中的每个元素创建类属性。此时数组已经创建好了,我在这里创建它只是为了演示。

我对类和对象不太熟悉。有人可以帮帮我吗?

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”。

【问题讨论】:

标签: php arrays class object


【解决方案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->$kvariable-variables 的一种类型,您可以在其中使用另一个变量的值来设置变量的名称。

【讨论】:

    【解决方案2】:

    您还可以使用神奇的__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");
        }
    }
    

    【讨论】:

      【解决方案3】:

      这是不可能的。但是,您可以在构造函数中创建它们:

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

      这将创建公共变量 - 因此,除非您希望它们私有/受保护,否则这是实现您想要的最简单的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-26
        • 2021-06-08
        • 1970-01-01
        • 1970-01-01
        • 2018-07-17
        • 1970-01-01
        • 2014-08-15
        • 2021-03-24
        相关资源
        最近更新 更多